2015-07-20 13 views
8

मैं सही ढंग से babel/polyfill को गल्प के साथ लोड नहीं कर सकता। मेरे मामले में Array.from विधि अपरिभाषित है। हालांकि अगर browser-polyfill.js को gulp .add(require.resolve("babel/polyfill")) के साथ लोड करने का प्रयास करें तो मुझे "only one instance of babel/polyfill is allowed" त्रुटि मिलती है। स्रोत कोड सही है क्योंकि मैंने इसका परीक्षणके साथ किया है।बेबेल पॉलीफिल और गल्प

स्रोत कोड:

//Lib.js 
export default class Lib 
{ 
    constructor() 
    { 
    var src = [1, 2, 3]; 
    this.dst = Array.from(src); 
    } 
    foo() 
    { 
    return this.dst; 
    } 
} 

//main.js 
import Lib from "./Lib"; 

var l = new Lib(); 
console.log(l.foo()); //Uncaught TypeError: Array.from is not a function 

Gulpfile:

var gulp  = require('gulp'); 
var sourcemaps = require('gulp-sourcemaps'); 
var source  = require('vinyl-source-stream'); 
var buffer  = require('vinyl-buffer'); 
var browserify = require('browserify'); 
var watchify = require('watchify'); 
var babelify = require('babelify'); 
var uglify  = require('gulp-uglify'); 

var entryPoint = "./js/main.js"; 


function compile(watch) 
{ 
    var bundler; 

    function debug() 
    { 
    bundler.bundle() 
    .on('error', function(err) { console.error(err); this.emit('end'); }) 
    .pipe(source('main.debug.js')) 
    .pipe(buffer()) 
    .pipe(sourcemaps.init({ loadMaps: true })) 
    .pipe(sourcemaps.write('./')) 
    .pipe(gulp.dest('./bin')); 
    } 

    function release() 
    { 
    bundler.bundle() 
    .on('error', function(err) { console.error(err); this.emit('end'); }) 
    .pipe(source('main.release.js')) 
    .pipe(buffer()) 
    .pipe(uglify()) 
    .pipe(gulp.dest('./bin')); 
    } 

    if(watch) 
    { 
    bundler = watchify(browserify(entryPoint, { debug: watch }) 
         .add(require.resolve("babel/polyfill")) 
         .transform(babelify)); 

    bundler.on('update', function() 
    { 
     console.log('Sources has changed. Rebuilding...'); 
     debug(); 
    }); 

    debug(); 
    } 
    else 
    { 
    bundler = browserify(entryPoint, { debug: watch }) 
       .add(require.resolve("babel/polyfill")) 
       .transform(babelify); 
    release(); 
    } 
} 


gulp.task('release', function() { return compile(false); }); 
gulp.task('debug', function() { return compile(true); }); 

gulp.task('default', ['debug']); 
+1

में उन्हें जिस तरह से आप कर रहे हैं '.add()' आईएनजी अपने प्रवेश बिंदु के बाद polyfill लोड कर देगा डाल दिया। 'ब्राउजरिफ़ाई (एंट्रीपॉइंट' के बजाय, शायद 'ब्राउजरिफाइज़ ([requ.resolve ("babel/polyfill"), एंट्रीपॉइंट]' – loganfsmyth

+0

यह काम है। मुझे अधिक ध्यान से एक दस्तावेज सीखना होगा। आपको बहुत धन्यवाद। –

उत्तर

7
browserify(entryPoint, { debug: watch }) 
      .add("babel/polyfill") 

entryPoint पहले से चल रहा है के साथ, दो प्रवेश द्वारों के साथ एक बंडल पैदा करेगा। इसका मतलब है कि पॉलीफिल के बाद लोड हो जाएगा, आपका आवेदन लोड हो गया है। या तो

require('babel/polyfill'); 

कर अपने entryPoint फाइल के अंदर, या सही क्रम

browserify(["babel/polyfill", entryPoint], { debug: watch }) 
+0

क्या वहां है वेबपैक के साथ इसके लिए एक समान फिक्स? मैं एक प्रोजेक्ट को वेबपैक में बदलने की कोशिश कर रहा हूं लेकिन परीक्षण में मुझे एक ही त्रुटि मिल रही है। –

+0

सही, वेबपैक में आप 'एंट्री:'।/app.js'' बदलना चाहते हैं या जो भी आपको 'प्रविष्टि' है: ['बेबेल-पॉलीफिल', './app.js'] ' – loganfsmyth

संबंधित मुद्दे