Acabo de comenzar a usar Babel para compilar mi código JavaScript ES6 en ES5. Cuando empiezo a usar Promesas parece que no está funcionando. El sitio web de Babel indica el apoyo a las promesas a través de polyfills.
Sin suerte, intenté agregar:
require("babel/polyfill");
o
import * as p from "babel/polyfill";
Con eso obtendré el siguiente error en el arranque de mi aplicación:
No se puede encontrar el módulo 'babel / polyfill'
Busqué el módulo pero parece que me falta algo fundamental aquí. También traté de agregar el antiguo y bueno bluebird NPM, pero parece que no funciona.
¿Cómo usar los polyfills de Babel?
npm install _name_
npm install --save babel-polyfill
yrequire('babel-polyfill)
.Respuestas:
Esto cambió un poco en babel v6.
De los documentos:
Instalación:
$ npm install babel-polyfill
Uso en Node / Browserify / Webpack:
para incluir el polyfill, debe solicitarlo en la parte superior del punto de entrada a su aplicación.
require("babel-polyfill");
Uso en el navegador:
disponible desde el
dist/polyfill.js
archivo dentro de unababel-polyfill
versión npm. Esto debe incluirse antes de todo el código compilado de Babel. Puede anteponerlo a su código compilado o incluirlo en un<script>
antes.NOTA: No haga
require
esto a través de browserify, etc., usebabel-polyfill
.fuente
Array.protorype.findIndex()
no funcionan sin el polyfill y babel no generará una excepción cuando se transpile? ¿Es esa la naturaleza de un Polyfill ™?Los documentos de Babel describen esto de manera muy concisa:
Asegúrese de requerirlo en el punto de entrada de su aplicación, antes de llamar a cualquier otra cosa. Si está utilizando una herramienta como webpack, eso se vuelve bastante simple (puede decirle a webpack que lo incluya en el paquete).
Si está utilizando una herramienta como
gulp-babel
obabel-loader
, también necesita instalar elbabel
paquete para usar el polyfill.También tenga en cuenta que para los módulos que afectan el alcance global (polyfills y similares), puede usar una importación concisa para evitar tener variables no utilizadas en su módulo:
fuente
import 'babel-core/polyfill'
sin instalarlobabel
y funcionó bien.import 'babel-core/polifyll'
funciona. Lo probé sin instalarbabel
y no funcionó para mí. Por cierto: ssube advice funciona.Para la versión 7 de Babel, si está utilizando @ babel / preset-env, para incluir polyfill todo lo que tiene que hacer es agregar un indicador 'useBuiltIns' con el valor de 'uso' en su configuración de babel. No es necesario exigir ni importar polyfill en el punto de entrada de su aplicación.
Con esta bandera especificada, babel @ 7 optimizará y solo incluirá los polyfills que necesita.
Para usar esta bandera, después de la instalación:
Simplemente agregue la bandera:
a su archivo de configuración de babel llamado "babel.config.js" (también nuevo en Babel @ 7), en la sección "@ babel / env":
Referencia:
Actualización de agosto de 2019:
Con el lanzamiento de Babel 7.4.0 (19 de marzo de 2019) @ babel / polyfill está en desuso. En lugar de instalar @ babe / polyfill, instalará core-js:
Se
corejs
agrega una nueva entrada a su babel.config.jsver ejemplo: https://github.com/ApolloTang/stackoverflow-eg--babel-v7.4.0-polyfill-w-core-v3
Referencia:
fuente
useBuiltIns: "usage"
No funciona de mi lado. Simplemente no incluye ningún polyfils en el paquete (ejemplo: uso generadores y aparece el error "regeneratorRuntime no está definido"). ¿Algunas ideas?Si su package.json se parece a lo siguiente:
Y recibe el
Cannot find module 'babel/polyfill'
mensaje de error, entonces probablemente solo necesite cambiar su declaración de importación DE:A:
Y asegúrese de que aparezca antes de cualquier otra
import
declaración (no necesariamente en el punto de entrada de su solicitud).Referencia: https://babeljs.io/docs/usage/polyfill/
fuente
En primer lugar, la respuesta obvia que nadie ha proporcionado, debe instalar Babel en su aplicación:
(o
babel-core
si en cambio quieresrequire('babel-core/polyfill')
).Aparte de eso, tengo una tarea difícil para recopilar mi es6 y jsx como un paso de compilación (es decir, no quiero usar
babel/register
, por eso estoy tratando de usarbabel/polyfill
directamente en primer lugar), así que me gustaría Pon más énfasis en esta parte de la respuesta de @ssube:Me encontré con un problema extraño en el que estaba tratando de
babel/polyfill
solicitar un archivo de inicio de entorno compartido y recibí el error al que hizo referencia el usuario: creo que podría haber tenido algo que ver con la forma en que Babel ordena la importación versus la que requiere, pero no puedo reproducir ahora. De todos modos, movermeimport 'babel/polyfill'
como la primera línea en los scripts de inicio de mi cliente y servidor solucionó el problema.Tenga en cuenta que si en su lugar desea usar,
require('babel/polyfill')
me aseguraría de que todas las demás declaraciones del cargador de módulos también sean necesarias y no utilicen importaciones; evite mezclar las dos. En otras palabras, si tiene alguna declaración de importación en su script de inicio, hagaimport babel/polyfill
la primera línea en su script en lugar derequire('babel/polyfill')
.fuente
sudo
con 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
fuente
Como dice Babel en el documentos , para Babel> 7.4.0 el módulo @ babel / polyfill está en desuso , por lo que se recomienda utilizar directamente las bibliotecas core-js y regenerator-runtime que antes se incluían en @ babel / polyfill.
Entonces esto funcionó para mí:
luego agregue a la parte superior de su archivo js inicial:
fuente