vue regeneratorruntime plugin not await async javascript generator babeljs

javascript - plugin - ReferenceError: regeneratorRuntime no está definido(pero funciona dentro de un ámbito)



regeneratorruntime is not defined parcel (2)

Babel asume que el polyfill se cargará antes que cualquier otra cosa en su aplicación, pero está utilizando una declaración de función, que se eleva, lo que significa que existe y se puede usar antes de require se haya llamado a require .

En el caso de los generadores, entonces necesita regeneratorRuntime que proporciona el polyfill, pero el polyfill no se ha cargado cuando se inicializa el regenerador.

La recomendación del equipo de Babel es hacer dos archivos:

index.js

require(''babel-polyfill''); require(''./app'');

Me he encontrado con este extraño suceso de:

ReferenceError: regeneratorRuntime is not defined

... que logré reproducir en una configuración muy mínima (en comparación con otras preguntas similares sobre el mismo problema), y también noté un comportamiento extraño dependiendo de si se usan los ámbitos.

El siguiente código funciona:

''use strict''; require(''babel-polyfill''); { // scope A (if you remove it you observe different behavior when .babelrc is present) function *simplestIterator() { yield 42; } for (let v of simplestIterator()) { console.log(v); } }

Los paquetes son:

$ npm ls --depth 0 [email protected] /home/mperdikeas/regeneratorRuntimeNotDefined ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] └── [email protected]

Los contenidos de .babelrc son:

$ cat .babelrc { "presets": ["es2016"] }

Sin embargo, cuando el alcance se elimina y el simplestIterator se coloca en el alcance global, falla con:

ReferenceError: regeneratorRuntime is not defined

Aún más extraño, si el archivo .babelrc se elimina / cambia de nombre, el código tiene éxito si el alcance está presente o no. Por cierto, si es el alcance o un IIFE que encapsula el generador no hace ninguna diferencia.

Repo de github mínimo que demuestra este comportamiento here .

Para observar el comportamiento:

git clone https://github.com/mperdikeas/regeneratorRuntimeNotDefined.git cd regeneratorRuntimeNotDefined/ npm install npm run build && npm run start

Lo anterior dará salida a 42 en la consola. Ahora quita el alcance y mira que pasa. A continuación, cambie el nombre de .babelrc para ver que vuelva a funcionar (con o sin alcance).

Mis preguntas son:

  • ¿Por qué el es2016 Babel es2016 desencadena este error?
  • ¿Por qué poner el generador en un alcance resuelve el problema?

actualizar

En base a la respuesta aceptada, y dado que este era el código para un módulo que estaba escribiendo, terminé haciendo:

require(''babel-polyfill''); module.exports = require(''./app.js'');


También puedes hacer lo siguiente con el complemento preestablecido y regenerador de transformación es2015 :

.babelrc

{ "presets": ["es2015"], ''plugins'': [ ''transform-regenerator'' ] }

Código

let regeneratorRuntime = require("regenerator-runtime"); // You code with ES6 generators

Por supuesto que debes instalar el paquete babel-plugin-transform-regenerator npm.