javascript - polyfill - regeneratorruntime is not defined parcel
RegeneratorRuntime no está definido (3)
Mientras tomo un enfoque diferente ** para usar Karma con Babel en mi proyecto, sospecho que tiene el mismo problema que tenía yo: el polyfill de Babel no se está cargando, por lo que no está obteniendo la funcionalidad que admite (incluido el tiempo de ejecución del regenerador personalizado que utiliza Babel para hacer que los generadores funcionen).
Un enfoque sería encontrar una manera de incluir el relleno de polietileno, quizás ingresándolo al Karma a través de la matriz de archivos:
files: [
''path/to/browser-polyfill.js'', // edited: polyfill => browser-polyfill per P.Brian.Mackey''s answer
...
Un enfoque alternativo puede ser usar el transformador de tiempo de ejecución de Babel [ editar: al volver a leer los documentos, esto no funcionará a menos que luego busque en el sitio web / webpack / etc. para procesar las llamadas require()
creadas por el transformador ]; por sus documentos,
El transformador opcional de
runtime
hace tres cosas:
- Requiere automáticamente
babel-runtime/regenerator
cuando usa los generadores / funciones asíncronas.- Requiere automáticamente
babel-runtime/core-js
y asigna métodos estáticos ES6 e incorporados.- Elimina los ayudantes de babel en línea y utiliza el
module babel-runtime/helpers
lugar.
No tengo experiencia con esto, pero sospecho que lo haría al incluir la optional: [''runtime'']
de los documentos de Babel en su configuración de babelPreprocessor
, a saber:
''babelPreprocessor'': {
options: {
optional: [''runtime''], // per http://babeljs.io/docs/usage/options/
sourceMap: ''inline''
},
...
( ** Actualmente estoy usando jspm + jspm-karma + algunas configuraciones para hacer que el polyfill de Babel se cargue en SystemJS; pregunte si es relevante y lo explicaré ) .
Estoy intentando ejecutar el Karma-babel-preprocessor y un generador directo de ES6:
//require(''babel/polyfill'');
describe("how Generators work", function() {
it("will allow generator functions", function() {
/*function * numbers() {
yield 1;
yield 2;
yield 3;
};*/
let numbers = {
[Symbol.iterator]:function*(){
yield 1;
yield 2;
yield 3;
}
}
let sum = 0;
for(n of numbers){
sum += n;
}
expect(sum).toBe(6);
});
});
A partir de esto generé mis archivos de prueba (ES6 => ES5) con babel:
babel src --watch --out-dir tests
Entonces corro karma start
me sale error:
ReferenceError: regeneratorRuntime no está definido ".
Bits relevantes en karma.conf.js:
// list of files / patterns to load in the browser
files: [
''test-main.js'',
{pattern: ''tests/*.js'', included: true}
],
// list of files to exclude
exclude: [
],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
''src/*.js'': [''babel'']
},
''babelPreprocessor'': {
options: {
sourceMap: ''inline''
},
filename: function(file) {
return file.originalPath.replace(//.js$/, ''.es5.js'');
},
sourceFileName: function(file) {
return file.originalPath;
}
},
// test results reporter to use
// possible values: ''dots'', ''progress''
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: [''progress''],
Puedo usar muchas funciones de ES6, incluidas las flechas. Simplemente no hay generadores.
karma.conf.js
para agregar browser-polyfill
como se menciona en el enlace Docs :
files: [
''node_modules/babel/browser-polyfill.js'',
''test-main.js'',
{pattern: ''tests/*.js'', included: true}
],
Después de esta modificación, la siguiente prueba de unidad funciona en Karma:
describe("how Generators work", function() {
it("will allow generator functions", function() {
/*function* numbers(){
yield 1;
yield 2;
yield 3;
};*///Simplified syntax does not work
let numbers = {
[Symbol.iterator]:function*(){
yield 1;
yield 2;
yield 3;
}
}
let sum = 0;
for(let num of numbers){
sum += num;
}
expect(sum).toBe(6);
});
});
Node js Env - actualizado diciembre 2015
Esta pregunta ya ha sido respondida, consulte la respuesta aceptada A MENOS que se ejecute en el entorno NodeJS.
Si, como yo, tenía el mismo mensaje de error: ''ReferenceError: regeneratorRuntime no está definido'' pero estaba ejecutando Babel en un entorno NodeJS, simplemente haciendo lo siguiente probablemente resolverá su problema:
npm install babel-polyfill --save
Luego inserte la siguiente declaración de requerimiento hacia la parte superior del módulo afectado para obtener el comportamiento requerido (generador):
require("babel-polyfill");
Esto debería ser todo lo que necesita, solo importando el módulo agrega el comportamiento requerido de polyfill en tiempo de ejecución.