2015-09-14 26 views
7

Napisałem zadanie typu gulp, aby skompilować moje skrypty .jsx i .js do pakietu, korzystając z funkcji watchify i babelify jako transformacji. Z jakiegoś powodu mój skrypt łyk wydaje się dławiąc się transformacji i nie jestem pewien, dlaczego:Browserowanie nie może utworzyć pakietu z transformacją babelify (TypeError: Path musi być ciągiem znaków).

gulp.task('browserify', function() { 
    var bundle = watchify(browserify('./app/jsx/client/index.jsx', { 
    extensions: ['.js', '.jsx'], 
    debug: process.env.NODE_ENV === 'development' 
    })); 
    bundle.transform(babelify); 
    bundle.on('update', function() { 
    rebundle(bundle); 
    }); 


    function rebundle(bundle) { 
    return bundle.bundle() 
    .on('error', function(error) { 
     console.log(error.stack, error.message); 
     this.emit('end'); 
    }) 
    .pipe(
     gulpif(
      (process.env.NODE_ENV == 'production'), 
      require('gulp-rename')('bundle.min.js'), 
      require('gulp-rename')('bundle.js') 
     ) 
    ) 
    .pipe(gulpif((process.env.NODE_ENV == 'production'), buffer())) 
    .pipe(gulpif((process.env.NODE_ENV == 'production'), uglify())) 
    .pipe(gulp.dest('dist/js')); 
    } 

    return rebundle(bundle); 
}); 

W konsoli ...

path.js:8 
    throw new TypeError('Path must be a string. Received ' + 
    ^

TypeError: Path must be a string. Received undefined 
    at assertPath (path.js:8:11) 
    at Object.posix.join (path.js:480:5) 
    at Transform.stream._transform (/home/zipp/search-admin/node_modules/gulp-rename/index.js:52:22) 
    at Transform._read (_stream_transform.js:167:10) 
    at Transform._write (_stream_transform.js:155:12) 
    at doWrite (_stream_writable.js:292:12) 
    at writeOrBuffer (_stream_writable.js:278:5) 
    at Transform.Writable.write (_stream_writable.js:207:11) 
    at Readable.ondata (/home/zipp/search-admin/node_modules/browserify/node_modules/read-only-stream/node_modules/readable-stream/lib/_stream_readable.js:572:20) 
    at emitOne (events.js:77:13) 
    at Readable.emit (events.js:169:7) 

Odpowiedz

14

Błąd dlatego trzeba vinyl-source-stream w tam. Wynik .bundle() jest standardowym strumieniem pliku danych w węźle. Dane są przekazywane do rename, która oczekuje strumienia obiektów Gulp File.

var source = require('vinyl-source-stream'); 

// stuff 

    function rebundle(bundle) { 
    return bundle.bundle() 
    .on('error', function(error) { 
     console.log(error.stack, error.message); 
     this.emit('end'); 
    }) 
    .pipe(
     gulpif(
      (process.env.NODE_ENV == 'production'), 

      // Use 'source' here instead, which converts binary 
      // streams to file streams. 
      source('bundle.min.js'), 
      source('bundle.js') 
     ) 
    ) 
    .pipe(gulpif((process.env.NODE_ENV == 'production'), buffer())) 
    .pipe(gulpif((process.env.NODE_ENV == 'production'), uglify())) 
    .pipe(gulp.dest('dist/js')); 
    } 

Zamiast rename, można użyć source zdefiniować początkową nazwę pliku.

+0

Dzięki. Rozgryzłem to, ale możesz zdobyć punkty :) – sent1nel

Powiązane problemy