vue regeneratorruntime polyfill plugin not await async javascript karma-runner babeljs karma-babel-preprocessor

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''],

Proyecto completo en github

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.