Comment puis-je installer le babel-polyfill de la bibliothèque?
J'ai juste commencé à utiliser de Babel pour compiler mon code javascript ES6 dans l'ES5. Quand j'ai commencer à utiliser des Promesses il semble que cela ne fonctionne pas. La Babel états de site web de support pour des promesses via polyfills.
Sans un peu de chance, j'ai essayé d'ajouter:
require("babel/polyfill");
ou
import * as p from "babel/polyfill";
Avec qui je vais recevoir le message d'erreur suivant sur mon application de l'amorçage:
Ne trouve pas le module 'babel/polyfill'
J'ai cherché pour le module, mais il semble que je suis absent quelque chose fondamentale ici. J'ai aussi essayé d'ajouter de la vieille et bonne bluebird MNP, mais il semble que ça ne fonctionne pas.
Comment utiliser les polyfills de Babel?
npm install _name_
- REMARQUE: Babel a maintenant un distinct MNP paquet pour cette: babel-polyfill
- juste pour vous faire économiser un clic, voici le lisez-moi complet.md fichier en version complète:
- Ouais, ils pourraient avoir ajouté un peu plus d'infos là je suis d'accord 🙂 Mais tout ce que vous devez savoir, c'est
npm install --save babel-polyfill
etrequire('babel-polyfill)
. - Puisque vous utilisez ES6, vous pouvez également utiliser l'importation "babel-polyfill".
Vous devez vous connecter pour publier un commentaire.
Cela a changé un peu dans babel v6.
De la documentation:
Installation:
$ npm install babel-polyfill
L'utilisation de Node /Browserify /Webpack:
Pour inclure le polyfill vous avez besoin d'exiger, au-dessus de la porte d'entrée de votre application.
require("babel-polyfill");
Utilisation dans le Navigateur:
Disponible à partir de la
dist/polyfill.js
fichier à l'intérieur d'unbabel-polyfill
mnp libération. Ce doit être inclus avant toutes vos compilé Babel code. Vous pouvez ajouter à votre code compilé ou l'inclure dans une<script>
avant.REMARQUE: Ne pas
require
via browserify, etc, l'utilisationbabel-polyfill
.Array.protorype.findIndex()
ne fonctionne pas sans le polyfill et babel ne soulèvent pas une exception quand il est transpiling? C'est que la nature d'un Polyfill™?Array.protorype.findIndex()
de travail, j'ai besoin d'inclure babel-polyfill, ce qui augmente mon résultant bundle par .08mb... semble un gaspillage :/La Babel docs décrire cette jolie façon concise:
Assurez-vous que vous avez besoin d'elle au point d'entrée à votre demande, avant toute autre chose est appelée. Si vous êtes en utilisant un outil comme webpack, qui devient assez simple (vous pouvez dire webpack de l'inclure dans le bundle).
Si vous êtes en utilisant un outil comme
gulp-babel
oubabel-loader
, vous devez également installer lababel
paquet lui-même à utiliser le polyfill.Également noter que pour les modules qui affectent la portée globale (polyfills et autres), vous pouvez utiliser un laconique à l'importation pour éviter d'avoir des variables inutilisées dans votre module:
import 'babel-core/polyfill'
sans installerbabel
et il a très bien fonctionné.import 'babel-core/polifyll'
œuvres. Je l'ai essayé sans installébabel
et il ne fonctionne pas pour moi. Par la route: ssube conseiller les œuvres.npm install babel-polyfill
{ entry: ['babel-polyfill', './app/entry.js'] }
Si votre colis.json ressemble à quelque chose comme:
Et vous obtenez le
Cannot find module 'babel/polyfill'
message d'erreur, alors vous avez probablement juste besoin de changer votre instruction import DE:À:
Et assurez-vous qu'il vient avant toute autre
import
déclaration (et non pas nécessairement au point d'entrée de votre application).Référence: https://babeljs.io/docs/usage/polyfill/
Pour Babel version 7, si vous utilisez @babel/preset-env, afin d'inclure polyfill tout ce que vous avez à faire est d'ajouter un drapeau "useBuiltIns" avec la valeur de "l'usage" dans votre babel de configuration. Il n'est pas nécessaire d'exiger ou d'importation de polyfill au point d'entrée de votre Application.
Avec ce drapeau spécifié, [email protected] permettra d'optimiser et incluent uniquement les polyfills a besoin de vous.
À l'utilisation de ce drapeau, après l'installation:
Il suffit d'ajouter le drapeau:
à votre babel fichier de configuration appelé "babel.config.js" (également de nouvelles de [email protected]), dans le cadre du "@babel/env" section:
Référence:
Mise À Jour Août 2019:
Avec la sortie de Babel 7.4.0 (19 Mars 2019) @babel/polyfill est obsolète. Au lieu d'installer @babe/polyfill, vous permettra d'installer de base-js:
Une nouvelle entrée
corejs
est ajouté à votre babel.config.jsvoir l'exemple: https://github.com/ApolloTang/stackoverflow-eg--babel-v7.4.0-polyfill-w-core-v3
Référence:
application
useBuiltIns: "usage"
ne fonctionne pas de mon côté. Il ne comprend pas tout polyfils en bundle (exemple: j'utilise des générateurs et obtenez une erreur "regeneratorRuntime n'est pas défini"). Des idées?Tout d'abord, la réponse la plus évidente que personne n'a été fournie, vous devez installer Babel dans votre application:
(ou
babel-core
si vous voulez plutôtrequire('babel-core/polyfill')
).A côté de cela, j'ai un grognement tâche à transpile mon es6 et jsx comme une étape de génération (c'est à dire je ne veux pas utiliser
babel/register
, c'est pourquoi je suis en train d'utiliserbabel/polyfill
directement à la première place), donc je voudrais mettre l'accent sur cette partie de @ssube réponse:Je suis tombé sur un étrange problème où j'essayais d'exiger
babel/polyfill
de certains environnement partagé de fichiers au démarrage et j'ai obtenu l'erreur à l'utilisateur référencé - je pense qu'il aurait pu avoir quelque chose à voir avec la façon dont babel commandes importations versus nécessite, mais je suis incapable de reproduire maintenant. De toute façon, le déplacementimport 'babel/polyfill'
sur la première ligne de mon client et de serveur, les scripts de démarrage réglé le problème.Noter que si vous voulez plutôt utiliser
require('babel/polyfill')
je voudrais faire en sorte que tous vos autres chargeur de module consolidés sont aussi en a besoin et pas le recours aux importations - éviter de mélanger les deux. En d'autres termes, si vous avez des déclarations d'importation dans votre script de démarrage, faireimport babel/polyfill
la première ligne de votre script plutôt que derequire('babel/polyfill')
.sudo
avec npm docs.npmjs.com/getting-started/fixing-npm-permissionshttps://www.quora.com/What-does-babel-polyfill-do
https://hackernoon.com/polyfills-everything-you-ever-wanted-to-know-or-maybe-a-bit-less-7c8de164e423