2015-03-11 19 views
24

Próbuję uruchomić Karma-babel-preprocessor i prosto do przodu ES6 generator:RegeneratorRuntime nie jest zdefiniowana

//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); 
    }); 
    }); 

Od tego ja generowane moje pliki testowe (ES6 => ES5) z babel:

babel src --watch --out-dir tests

Potem biegnę karma start otrzymuję błąd:

ReferenceError: regeneratorRuntime is not defined".

Istotne bity w 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'], 

Full project on github

jestem w stanie korzystać z wielu ES6 dysponuje łącznie strzałkami. Po prostu nie generuj generatorów.

Odpowiedz

20

Podczas gdy używam innego podejścia ** do używania Karmy z Babel w moim projekcie, podejrzewam, że masz taki sam problem: Babel polyfill nie jest ładowany, a więc nie otrzymujesz funkcjonalność, którą obsługuje (w tym niestandardowe środowisko uruchomieniowe generatora, które Babel wykorzystuje do pracy generatorów).

Jedno podejście byłoby znaleźć sposób, aby obejmować PolyFill, być może poprzez wprowadzenie go do karmy poprzez tablicy pliki:

files: [ 
    'path/to/browser-polyfill.js', // edited: polyfill => browser-polyfill per P.Brian.Mackey's answer 
    ... 

Alternatywnym podejściem może być użycie Babla runtime transformer [edit: na rereading dokumenty, to nie zadziała, chyba że potem przejrzysz przeglądarkę/webpack/etc. przetwarzać require() połączeń utworzonych przez transformator]; za jego docs,

The runtime optional transformer does three things:

  • Automatically requires babel-runtime/regenerator when you use generators/async functions.
  • Automatically requires babel-runtime/core-js and maps ES6 static methods and built-ins.
  • Removes the inline babel helpers and uses the module babel-runtime/helpers instead.

nie mam doświadczenia z tym, ale podejrzewam, że będzie to zrobić poprzez włączenie opcji z docs Babel optional: ['runtime'] w babelPreprocessor config, tj .:

'babelPreprocessor': { 
    options: { 
    optional: ['runtime'], // per http://babeljs.io/docs/usage/options/ 
    sourceMap: 'inline' 
    }, 
... 

(** obecnie używam jspm + jspm-karma + jakiś config aby uzyskać PolyFill Babel do załadowania w SystemJS;. zapytać, czy istotne i będę tłumaczyć)

+1

Próbowałem obie opcje. Żadne z nich nie działało dla mnie. Dodałem 'node_modules/babel/polyfill.js' oraz Error:' Uncaught ReferenceError: moduł nie jest zdefiniowany'. Wierzę, że odnosi się do pojedynczej linii w tym pliku zawierającej 'moduł'. Dodałem coraz więcej katalogów dir/*. Js i po prostu zagłębiłem się w to bez żadnego działania. Druga wymieniona opcja wydaje się nie mieć wpływu, ten sam błąd. –

+1

Twoja odpowiedź jest bardzo bliska i na pewno postawi mnie na właściwej drodze. Jest kilka błędów, więc wysłałem odpowiedź, aby pomóc je zidentyfikować. –

+0

Awesome! Zmieniłem ścieżkę polyfill w mojej odpowiedzi, aby nie pomylić innych. – Martin

3

i zmodyfikowane karma.conf.js dodać browser-polyfill jak wspomniano w Docs Link:

files: [ 
      'node_modules/babel/browser-polyfill.js', 
     'test-main.js', 
     {pattern: 'tests/*.js', included: true} 
    ], 

Po tej modyfikacji, następujący test jednostka pracuje w 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); 
    }); 
    }); 
+0

jak wygląda twój cały plik karma.conf? – JerryFox

33

węzeł js Kop - Aktualizacja grudzień 2015

ten na pytanie już udzielono odpowiedzi, patrz zaakceptowana odpowiedź, BEZ WKłADU w środowisku NodeJS.

Jeśli tak jak ja, miał ten sam komunikat o błędzie: „ReferenceError: regeneratorRuntime nie jest zdefiniowana” ale biegaliśmy Babel w środowisku NodeJS, to po prostu robi co następuje prawdopodobnie będzie rozwiązać problem:

npm install babel-polyfill --save 

Następnie wstawić następujący wymagają oświadczenie w kierunku górnej części modułu dotkniętego aby uzyskać wymagany (generator) zachowanie:

require("babel-polyfill"); 

To powinno być wszystko czego potrzebujesz, po prostu importując moduł dodaje wymagane zachowanie polyfill w czasie wykonywania.

+0

Starałem się, aby [FuseBox] (http://fuse-box.org/) pracował nad pakowaniem aplikacji React i musiałem to zrobić, aby działało poprawnie. –

Powiązane problemy