Estoy tratando de ejecutar el preprocesador Karma-babel y un generador ES6 sencillo:
//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
Luego ejecuto karma start y obtengo un 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 vayas a Generadores.
Node js Env - actualizado en diciembre de 2015
Esta pregunta ya ha sido respondida, vea la respuesta aceptada A MENOS QUE se ejecute dentro del entorno NodeJS.
Si, como yo, tuvo el mismo mensaje de error: 'ReferenceError: regeneratorRuntime is not added' pero estaba ejecutando Babel dentro de un entorno NodeJS, simplemente haciendo lo siguiente probablemente resolverá su problema:
npm install babel-polyfill --saveLuego, inserte la siguiente instrucción require 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, simplemente importando el módulo se agrega el comportamiento de polyfill requerido en tiempo de ejecución.
Similar a la publicación de arcseldon, estaba ejecutando Babel dentro de un entorno NodeJS y recibí el mismo mensaje de error 'ReferenceError: regeneratorRuntime is not added'. Si bien la instalación de babel-polyfill funciona, opté por @babel/plugin-transform-runtime en su lugar.
@babel/plugin-transform-tiempo de ejecución
Debe instalarse de dos maneras... primero como una dependencia de desarrollo:
npm install --save-dev @babel/plugin-transform-runtimey segundo como una dependencia de producción:
npm install --save @babel/runtimeY luego debe haber una simple adición a su archivo .babelrc:
{ "plugins": ["@babel/plugin-transform-runtime"] }Estas adiciones brindan la funcionalidad de creación de ES6 sin el ReferenceError.
Si bien estoy adoptando un enfoque diferente** para usar Karma con Babel en mi proyecto, sospecho que tiene el mismo problema que yo: el relleno múltiple de Babel no se está cargando, por lo que no obtiene 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 polyfill, tal vez pasándolo a 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 explore/webpack/etc. para procesar las llamadas require() creadas por el transformador ]; según sus documentos,
El transformador opcional de tiempo de
runtimehace tres cosas:
- Requiere automáticamente
babel-runtime/regeneratorcuando usa generadores/funciones asincrónicas.- Requiere automáticamente
babel-runtime/core-jsy asigna métodos estáticos e integrados de ES6.- Elimina los ayudantes de babel en línea y utiliza el
module babel-runtime/helpersen su 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 + alguna configuración para que Babel polyfill se cargue en SystemJS; pregunte si es relevante y lo expondré).