Estoy tratando de usar asíncrono, espero desde cero en Babel 6, pero obtengo regeneratorRuntime no está definido.
archivo .babelrc
{
"presets": [ "es2015", "stage-0" ]
}
archivo package.json
"devDependencies": {
"babel-core": "^6.0.20",
"babel-preset-es2015": "^6.0.15",
"babel-preset-stage-0": "^6.0.15"
}
archivo .js
"use strict";
async function foo() {
await bar();
}
function bar() { }
exports.default = foo;
Usarlo normalmente sin async / await funciona bien. ¿Alguna idea de lo que estoy haciendo mal?
javascript
node.js
babeljs
BrunoLM
fuente
fuente
Respuestas:
babel-polyfill
( obsoleto a partir de Babel 7.4) es obligatorio. También debe instalarlo para que funcione asincrónico / en espera.package.json
.babelrc
.js con async / await (código de muestra)
En el archivo de inicio
Si está utilizando webpack , debe colocarlo como el primer valor de su
entry
matriz en su archivo de configuración de webpack (generalmentewebpack.config.js
), según el comentario de @Cemen:Si desea ejecutar pruebas con babel, use:
fuente
require("babel-polyfill")
que no está trabajando, se agrega"babel-polyfill"
en suentry
en config, así:entry: ["babel-polyfill", "src/main.js"]
. Esto funcionó para mí, incluido el uso en webpack-dev-server con HMR.devDependency
si está usando webpack porque luego "compilará" los archivos antes de ejecutarlos.dependency
si no está utilizando webpack y necesita babel.Además de polyfill, uso babel-plugin-transform-runtime . El complemento se describe como:
También incluye soporte para asíncrono / espera junto con otros elementos integrados de ES 6.
En
.babelrc
, agregue el complemento de tiempo de ejecuciónfuente
babel-runtime
que async esperara a funcionar. ¿Es eso correcto? Editar: estoy ejecutando el lado del servidor de código. :)babel-plugin-transform-runtime
requerido Funciona de maravilla.require
llamadas que agrega eltransform-runtime
complemento.npm install --save-dev @babel/plugin-transform-runtime
Babel 7 usuarios
Tuve algunos problemas para solucionar esto, ya que la mayoría de la información era para versiones anteriores de Babel. Para Babel 7, instale estas dos dependencias:
Y, en .babelrc, agregue:
fuente
"plugins": ["@babel/plugin-transform-runtime"]
, en lugar del"plugins": [ ["@babel/transform-runtime"] ]
aquí. Nombre de complemento diferente. Ambas obras. ¿Pero cuál es el adecuado? ..@babel/transform-runtime
a los complementos me causó el error "las exportaciones no están definidas". Lo cambié a esto para que asincrónico funcione en Babel7:["@babel/plugin-transform-runtime", { "regenerator": true } ]
Actualizar
Funciona si configura el objetivo en Chrome. Pero podría no funcionar para otros objetivos, consulte: https://github.com/babel/babel-preset-env/issues/112
Entonces, esta respuesta NO es adecuada para la pregunta original. Lo mantendré aquí como referencia
babel-preset-env
.Una solución simple es agregar
import 'babel-polyfill'
al comienzo de su código.Si usa webpack, una solución rápida es agregar
babel-polyfill
como se muestra a continuación:Creo que he encontrado la mejor práctica más reciente.
Verifique este proyecto: https://github.com/babel/babel-preset-env
Use lo siguiente como su configuración de babel:
Entonces su aplicación debería estar lista para usar en las últimas 2 versiones del navegador Chrome.
También puede establecer Nodo como objetivos o ajustar la lista de navegadores de acuerdo con https://github.com/ai/browserslist
Dime qué, no me digas cómo.
Me gusta mucho
babel-preset-env
la filosofía: dime qué entorno quieres soportar, NO me digas cómo apoyarlos. Es la belleza de la programación declarativa.He probado
async
await
y funcionan. No sé cómo funcionan y realmente no quiero saberlo. Quiero pasar mi tiempo en mi propio código y en mi lógica de negocios. Gracias ababel-preset-env
, me libera del infierno de configuración de Babel.fuente
babel-preset-env
pero creo que vale la pena. Me encanta el estilo declarativo también. Tambiényarn install
es ahorayarn add
Alternativamente, si no necesita todos los módulos
babel-polyfill
proporcionados, puede especificarbabel-regenerator-runtime
en la configuración de su paquete web:Cuando se usa webpack-dev-server con HMR, esto reduce la cantidad de archivos que tiene que compilar en cada compilación en gran medida. Este módulo se instala como parte, por
babel-polyfill
lo tanto, si ya tiene que está bien, de lo contrario, puede instalarlo por separado connpm i -D babel-regenerator-runtime
.fuente
Mi solución simple:
.babelrc
fuente
loose: true
necesario?Babel 7.4.0 o posterior (core-js 2/3)
A partir de Babel 7.4.0 ,
@babel/polyfill
está en desuso .En general, hay dos formas de instalar polyfills / regenerator: a través del espacio de nombres global (Opción 1) o como ponyfill (Opción 2, sin contaminación global).
Opción 1:
@babel/preset-env
utilizará automáticamente
regenerator-runtime
y decore-js
acuerdo a su objetivo . No es necesario importar nada manualmente. No olvide instalar dependencias de tiempo de ejecución:Alternativamente, configúrelo
useBuiltIns: "entry"
e impórtelo manualmente:Opción 2:
@babel/transform-runtime
con@babel/runtime
(sin contaminación de alcance global)Instalarlo:
Si usa core-js polyfills, instala
@babel/runtime-corejs2
o@babel/runtime-corejs3
, en su lugar, consulte aquí .Salud
fuente
babel-regenerator-runtime
ahora está en desuso , en su lugar uno debería usarregenerator-runtime
.Para usar el generador de tiempo de ejecución con
webpack
ybabel
v7:instalar
regenerator-runtime
:Y luego agregue dentro de la configuración del paquete web:
fuente
@babel/preset-env
'suseBuiltIns
de insertar de forma dinámica en tiempo de ejecución basado en los navegadores de destino.Actualice su
.babelrc
archivo de acuerdo con los siguientes ejemplos, funcionará.Si estás usando el
@babel/preset-env
paquetefuente
targets
parece referirse a este :the environments you support/target for your project
, mientras quetargets.node
es esta :if you want to compile against the current node version, you can specify "node": true or "node": "current", which would be the same as "node": process.versions.node
"stage-0"
en el proceso) y el error del regenerador desapareció.Tenga cuidado con las funciones izadas
Tenía tanto mi 'importación de polyfill' como mi 'función asíncrona' en el mismo archivo, sin embargo, estaba usando la sintaxis de la función que lo eleva por encima del polyfill que me daría el
ReferenceError: regeneratorRuntime is not defined
error.Cambiar este código
a esto
para evitar que se eleve por encima de la importación de polyfill.
fuente
A partir de octubre de 2019, esto funcionó para mí:
Agregue esto al preset.
Luego instale regenerator-runtime usando npm.
Y luego en el uso de su archivo principal: (esta importación se usa solo una vez)
Esto le permitirá usar
async
awaits
en su archivo y eliminar elregenerator error
fuente
useBuiltIns
predeterminado seráfalse
. Esto no importará automáticamente ningún polyfills según el entorno de destino, lo que socava el propósito de"@babel/preset-env"
. Aquí también hay un comentario relacionado de uno de los desarrolladores de babel.Si lo usa
babel-preset-stage-2
, solo tiene que comenzar el script con--require babel-polyfill
.En mi caso, este error fue arrojado por las
Mocha
pruebas.Siguiente solucionó el problema
mocha \"server/tests/**/*.test.js\" --compilers js:babel-register --require babel-polyfill
fuente
Comencé a recibir este error después de convertir mi proyecto en un proyecto mecanografiado. Por lo que entiendo, el problema proviene de async / esperar no ser reconocido.
Para mí, el error se solucionó agregando dos cosas a mi configuración:
Como se mencionó anteriormente muchas veces, necesitaba agregar babel-polyfill en mi matriz de entrada de paquete web:
Necesitaba actualizar mi .babelrc para permitir la compilación de async / await en generadores:
DevDependencies:
Tuve que instalar algunas cosas en mis devDependencies en mi archivo package.json también. A saber, me faltaba el babel-plugin-transform-async-to-generator, babel-polyfill y el babel-preset-es2015:
Código completo Gist:
Obtuve el código de un resumen de GitHub realmente útil y conciso que puedes encontrar aquí .
fuente
env
lugar dees2015
.env
incluyees2015
ya.Tuve este problema en Chrome. Similar a la respuesta de RienNeVaPlu͢s, esto lo resolvió para mí:
Luego en mi código:
Feliz de evitar los 200 kB adicionales de
babel-polyfill
.fuente
Este error se produce cuando las
async/await
funciones se usan sin los complementos de Babel adecuados. A partir de marzo de 2020, lo siguiente debe ser todo lo que necesita hacer. (@babel/polyfill
y muchas de las soluciones aceptadas han quedado en desuso en Babel. Lea más en los documentos de Babel ) .En la línea de comando, escriba:
En su
babel.config.js
archivo, agregue este complemento@babel/plugin-transform-runtime
. Nota: El siguiente ejemplo incluye los otros presets y complementos que tengo para un pequeño proyecto React / Node / Express en el que trabajé recientemente:fuente
.babelrc
ve así: `` `{{presets": ["@ babel / preset-env"], "plugins": ["@ babel / plugin-transform-runtime"]} `` `Obtendrá un error porque los generadores asíncronos / en espera usan, que son una función ES2016, no ES2015. Una forma de solucionar esto es instalar el preajuste de babel para ES2016 (
npm install --save babel-preset-es2016
) y compilar a ES2016 en lugar de ES2015:Como mencionan las otras respuestas, también puede usar polyfills (aunque asegúrese de cargar el polyfill primero antes de que se ejecute cualquier otro código). Alternativamente, si no desea incluir todas las dependencias de polyfill, puede usar babel-regenerator-runtime o babel-plugin-transform-runtime .
fuente
Solucioné este error instalando babel-polyfill
luego lo importé en el punto de entrada de mi aplicación
para probar incluí --require babel-polyfill en mi script de prueba
fuente
Nueva respuesta ¿Por qué sigues mi respuesta?
Respuesta: Porque voy a darle una respuesta con la última versión de actualización del proyecto npm.
14/04/2017
Si usa esta versión o más UP de Npm y todas las demás ... SO solo necesita cambiar:
webpack.config.js
Después de cambiar los
webpack.config.js
archivos, simplemente agregue esta línea a la parte superior de su código.Ahora verifique que todo esté bien. Link de referencia
También gracias @BrunoLM por su buena respuesta.
fuente
Los navegadores de destino que necesito admitir ya admiten async / wait, pero al escribir pruebas de mocha, sin la configuración adecuada, todavía recibí este error.
La mayoría de los artículos I Googled no están actualizados, incluyendo la respuesta y alta aceptada votaron respuestas aquí, es decir, que no es necesario
polyfill
,babel-regenerator-runtime
,babel-plugin-transform-runtime
. etc. si su (s) navegador (es) de destino ya es compatible con async / wait (por supuesto, si no necesita polyfill)Yo tampoco quiero usar
webpack
.La respuesta de Tyler Long está en el camino correcto ya que sugirió
babel-preset-env
(pero lo omití primero ya que mencionó polifill al principio). Todavía recibí elReferenceError: regeneratorRuntime is not defined
primero y luego me di cuenta de que era porque no había establecido el objetivo. Después de establecer el objetivo para el nodo, reparo el error regeneratorRuntime :fuente
Para usuarios de babel7 y ParcelJS> = 1.10.0 usuarios
.babelrc
tomado de https://github.com/parcel-bundler/parcel/issues/1762
fuente
1 - Instalar babel-plugin-transform-async-to-module-method, babel-polyfil, bluebird, babel-preset-es2015, babel-core:
2 - Agregue su js babel polyfill:
import 'babel-polyfill';
3 - Agregue el complemento en su .babelrc:
Fuente: http://babeljs.io/docs/plugins/transform-async-to-module-method/
fuente
Tenía una configuración
con webpack usando
presets: ['es2015', 'stage-0']
y mocha que ejecutaba pruebas compiladas por webpack.
Para hacer que mis
async/await
pruebas funcionen, todo lo que tuve que hacer es agregar lamocha --require babel-polyfill
opción.fuente
Recibo este error al usar gulp con rollup cuando intenté usar generadores ES6:
Puedo decir que la solución fue incluir
babel-polyfill
como componente Bower:y agregarlo como dependencia en index.html:
fuente
Para las personas que buscan usar la
babel-polyfill
versión 7 ^, haga esto conwebpack
ver3 ^.Npm instala el módulo
npm i -D @babel/polyfill
Luego, en su
webpack
archivo en suentry
punto, haga estofuente
Mi babel 7 boilerplate de trabajo para reaccionar con el tiempo de ejecución del regenerador:
.babelrc
package.json
main.js
fuente
Si está creando una aplicación, solo necesita
@babel/preset-env
y@babel/polyfill
:(Nota: no necesita instalar los paquetes
core-js
yregenerator-runtime
porque ambos se habrán instalado por @ babel / polyfill)Luego en
.babelrc
:Ahora configure sus entornos objetivo. Aquí lo hacemos en el
.browserslistrc
archivo:Finalmente, si fuiste con
useBuiltIns: "entry"
, ponimport @babel/polyfill
en la parte superior de su archivo de entrada. De lo contrario, ya está.El uso de este método importará selectivamente esos polyfills y el archivo 'regenerator-runtime' (solucionando su
regeneratorRuntime is not defined
problema aquí) SOLAMENTE si los necesita cualquiera de sus entornos / navegadores de destino.fuente
para referencia futura :
A partir de la versión 7.0.0-beta.55 de Babel, se han eliminado los preajustes de etapa
consulte el blog https://babeljs.io/blog/2018/07/27/removing-babels-stage-presets
async aguardando aún puede ser utilizado por
https://babeljs.io/docs/en/babel-plugin-transform-async-to-generator#usage
instalación
uso en .babelrc
y usando babel polyfill https://babeljs.io/docs/en/babel-polyfill
instalación
webpack.config.js
fuente
En 2019 con
Babel 7.4.0+
, elbabel-polyfill
paquete ha quedado en desuso a favor de incluir directamentecore-js/stable
(core-js@3+
, a las funciones de Polyfill ECMAScript) yregenerator-runtime/runtime
(necesario para usar las funciones del generador transpilado):Información de la
babel-polyfill
documentación .fuente
La forma más fácil de solucionar este 'problema de regenerador en tiempo de ejecución no definido' en su consola:
No tiene que instalar complementos innecesarios. Solo agrega:
<script src="https://unpkg.com/[email protected]/runtime.js"></script>
dentro del cuerpo en su index.html. Ahora regeneratorRuntime debe definirse una vez que ejecute babel y ahora sus funciones asíncronas / de espera deben compilarse correctamente en ES2015
fuente
Si usa Gulp + Babel para una interfaz de usuario, debe usar babel-polyfill
npm install babel-polyfill
y luego agregue una etiqueta de script a index.html sobre todas las demás etiquetas de script y haga referencia a babel-polyfill desde node_modules
fuente