Comment installer la bibliothèque babel-polyfill?

Je viens de commencer à utiliser Babel pour comstackr mon code javascript ES6 dans ES5. Quand je commence à utiliser Promises, il semble que cela ne fonctionne pas. Le site Web de Babel indique un soutien aux promesses via les polyfills.

Sans chance, j’ai essayé d’append:

require("babel/polyfill"); 

ou

 import * as p from "babel/polyfill"; 

Avec cela, j’obtiendrai l’erreur suivante sur le démarrage de mon application:

Impossible de trouver le module ‘babel / polyfill’

J’ai cherché le module mais il semble que je manque quelque chose de fondamental ici. J’ai aussi essayé d’append l’ancien et le bon bluebird NPM mais il semble que cela ne fonctionne pas.

Comment utiliser les polyfills de Babel?

    Cela a un peu changé dans babel v6.

    De la documentation:

    Le polyfill émulera un environnement ES6 complet. Ce polyfill est automatiquement chargé lors de l’utilisation de babel-node.

    Installation:
    $ npm install babel-polyfill

    Utilisation dans Node / Browserify / Webpack:
    Pour inclure le polyfill, vous devez l’exiger en haut du point d’entrée de votre application.
    require("babel-polyfill");

    Utilisation dans le navigateur:
    Disponible à partir du fichier dist/polyfill.js dans une version de babel-polyfill npm. Cela doit être inclus avant tout votre code Babel compilé. Vous pouvez soit l’append à votre code compilé, soit l’inclure dans un avant lui.

    NOTE: N'exigez pas cela via browserify, etc., utilisez babel-polyfill .

    Les documents de Babel décrivent cela de manière assez concise:

    Babel comprend un polyfill qui inclut un runtime régénérateur personnalisé et core.js.

    Cela émulera un environnement ES6 complet. Ce polyfill est automatiquement chargé en utilisant babel-node et babel / register.

    Assurez-vous que vous en avez besoin au point d’entrée de votre application, avant tout appel à autre chose. Si vous utilisez un outil comme Webpack, cela devient assez simple (vous pouvez dire à Webpack de l’inclure dans le bundle).

    Si vous utilisez un outil comme gulp-babel ou babel-loader , vous devez également installer le paquet babel lui-même pour utiliser le polyfill.

    Notez également que pour les modules qui affectent la scope globale (polyfills et autres), vous pouvez utiliser une importation laconique pour éviter d’avoir des variables non utilisées dans votre module:

     import 'babel/polyfill'; 

    Si votre package.json ressemble à ceci:

      ... "devDependencies": { "babel": "^6.5.2", "babel-eslint": "^6.0.4", "babel-polyfill": "^6.8.0", "babel-preset-es2015": "^6.6.0", "babelify": "^7.3.0", ... 

    Et vous obtenez le message d’erreur Cannot find module 'babel/polyfill' , alors vous avez probablement juste besoin de changer votre instruction d’importation FROM:

     import "babel/polyfill"; 

    À:

     import "babel-polyfill"; 

    Et assurez-vous qu’il vient avant toute autre déclaration d’ import (pas nécessairement au point d’entrée de votre application).

    Référence: https://babeljs.io/docs/usage/polyfill/

    Tout d’abord, la réponse évidente que personne n’a fournie, vous devez installer Babel dans votre application:

     npm install babel --save 

    (ou babel-core si vous voulez plutôt require('babel-core/polyfill') ).

    En dehors de cela, j’ai la lourde tâche de transpercer mes es6 et jsx comme une étape de construction (c’est-à-dire que je ne veux pas utiliser babel/register , c’est pourquoi j’essaie d’utiliser directement babel/polyfill ), J’aimerais donc mettre davantage l’accent sur cette partie de la réponse de @ ssube:

    Assurez-vous de l’exiger au point d’entrée de votre application, avant toute chose appelée

    Je suis tombé sur un problème étrange où j’essayais d’exiger babel/polyfill partir d’un fichier de démarrage d’un environnement partagé et j’ai eu l’erreur référencée par l’utilisateur – je pense que cela a quelque chose à voir incapable de se reproduire maintenant. Quoi qu’il en soit, le fait de déplacer import 'babel/polyfill' tant que première ligne dans les scripts de démarrage du client et du serveur a résolu le problème.

    Notez que si vous préférez utiliser require('babel/polyfill') , assurez-vous que toutes les autres instructions du chargeur de module sont également requirejses et n’utilisent pas les importations – évitez de mélanger les deux. En d’autres termes, si vous avez des instructions d’importation dans votre script de démarrage, faites en sorte que import babel/polyfill la première ligne de votre script plutôt que d’ require('babel/polyfill') .

    babel-polyfill vous permet d’utiliser l’ensemble des fonctionnalités d’ES6 au-delà des modifications de syntaxe. Cela inclut des fonctionnalités telles que de nouveaux objects intégrés comme Promises et WeakMap, ainsi que de nouvelles méthodes statiques telles que Array.from ou Object.assign.

    Sans babel-polyfill, babel ne vous permet d’utiliser que des fonctions telles que les fonctions fléchées, la déstructuration, les arguments par défaut et d’autres fonctionnalités spécifiques à la syntaxe introduites dans ES6.

    https://www.quora.com/What-does-babel-polyfill-do

    https://hackernoon.com/polyfills-everything-you-ever-wanted-to-know-or-maybe-a-bit-less-7c8de164e423