2016-01-12 13 views
6

W Babel docs po prostu powiedzieć, że obejmuje import "babel-polyfill"; tak, że można używać generatorów ES6 ale po tej linii zawarte w moich gulpfile.js Wciąż gen wyjątek: Uncaught ReferenceError: regeneratorRuntime is not defined ten jest moje gulpfile.jsJak korzystać Babel PolyFill w gulpfile.js

import 'babel-polyfill'; 

var gulp = require("gulp"), 
babel = require("gulp-babel"), 
concat = require('gulp-concat'), 
rename = require('gulp-rename'), 
uglify = require('gulp-uglify'); 

gulp.task("babel", function() { 
return gulp.src(jsSrc) 
    .pipe(concat('Main.js')) 
    .pipe(babel()) 
    .pipe(gulp.dest(jsDest)) 
    .pipe(rename('Main-min.js')) 
    .pipe(uglify()) 
    .pipe(gulp.dest(jsDest)); 
}); 

jsSrc mieć maines6.js i inne .js plików. W maines6.js tutaj jest mój generator:

function* anotherGenerator(i) { 
    yield i + 1; 
    yield i + 2; 
    yield i + 3; 
} 

Nie wiem jak tego użyć .. możesz mi pomóc?

+0

Musisz zaimportować ją do aktualnego pliku Main.js, ponieważ jest tam, gdzie jest używana. –

+0

Tak, generator jest obsługiwany przez Chrome. Ale nie chcę oddzielić generatora do innego pliku. –

+0

Po prostu postępuj zgodnie z ** Użycie w przeglądarce ** w tym samym Babel [docs] (http://babeljs.io/docs/usage/polyfill/#usage-in-browser), o którym wspomniałeś w swoim pytaniu. –

Odpowiedz

1

to include the polyfill you need to require it at the top of the entry point to your application.

import 'babel/polyfill' musiałby iść na górze pliku wejściowego jsSrc

+0

Umieszczam import na górze i myślę, że Babel przekształca go w 'require (" babel/polyfill ");' Następnie otrzymałem 'Uncaught ReferenceError: require is not defined' –

+0

Aby użyć polyfill z' require 'lub' import' musisz skonfigurować moduł ładujący moduły. Dwie popularne opcje to 'webpack' i' browserify'. Sprawdź sekcję __Usage w przeglądarce__: https://babeljs.io/docs/usage/polyfill/. –

+0

Przepraszam, zapomniałem wspomnieć.Sekcja __Usage in Browser__ jest tylko wtedy, gdy chcesz zrezygnować z modułu loader (AKA bundler) w procesie kompilacji. –

3

Skoro jesteś po prostu używając łyk, a nie jakiś moduł Bundler (WebPACK dla EG)

Powinieneś po tej instrukcji https://github.com/babel/gulp-babel#runtime

npm install --save-dev babel-plugin-transform-runtime 

a następnie używać go tak jak to

.pipe(babel({ 
     plugins: ['transform-runtime'] 
    })) 

powinno wystarczyć :)

EDIT:

Wydaje się, że Babel-plugin-transform-runtime dodaj wymaga połączenia do przekształconej pliku, więc myślę, że trzeba użyj modułu ładującego. Proponuję pakiet webowy, chociaż istnieją alternatywy takie jak browserify i jspm.

Musisz

npm install -g webpack 
npm install babel-loader babel-core babel-polyfill babel-preset-es2015 --save-dev 

Następnie trzeba utworzyć plik webpack.config.js. Oto bardzo prymitywna konfiguracja.

module.exports = { 
    context: __dirname + '/app', 
    entry: ['babel-polyfill', './entries/index.js'], 
    output: { 
     path: 'dist', 
     filename: '[name].js' 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.js/, 
       exclude: /node_modules/, 
       loader: 'babel', 
       query: { 
        presets: ['es2015'] 
       } 
      } 
     ] 
    } 
}; 

Z config powyższej struktury plików powinny looke tak

project/ 
    node_modules/ 
    app/ 
     entries/ 
      main.js 
    dist/ 
     main.js 
    webpack.config.js 
    package.json 

Następnie wystarczy uruchomić webpack z linii poleceń. Jeśli chcesz uzyskać wersję zminimalizowaną, uruchom webpack -p

+0

Rozwiązuje to wyjątek 'generation', ale teraz otrzymuję' Uncaught ReferenceError: require is not defined'. Oto linia, która powoduje, że proble z chrome devtools console: 'var _regenerator = require (" babel-runtime/regenerator ");' –

+1

Cóż, to jest do bani :(Babel wydaje się zawierać wymagania w kodzie transformatora, więc wydaje się że będziesz musiał użyć jakiegoś modułu do pakowania modułów Sugerowałbym pakiet sieciowy – kosman

+1

Tak, sprawdzę to, dzięki .. W każdym razie powinienem zamknąć moje pytanie czy nie? Myślałem, że 'babel- polyfill' ma być używany z łykiem, ale to nie jest ... –