reactjs – Browserify无法使用babelify变换创建包(TypeError:Path必须是字符串.)

前端之家收集整理的这篇文章主要介绍了reactjs – Browserify无法使用babelify变换创建包(TypeError:Path必须是字符串.)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我编写了一个gulp任务,使用watchify和babelify作为转换将我的.jsx和.js脚本编译成一个包.出于某种原因,我的gulp脚本似乎对变换感到窒息,我不知道为什么:
  1. gulp.task('browserify',function() {
  2. var bundle = watchify(browserify('./app/jsx/client/index.jsx',{
  3. extensions: ['.js','.jsx'],debug: process.env.NODE_ENV === 'development'
  4. }));
  5. bundle.transform(babelify);
  6. bundle.on('update',function() {
  7. rebundle(bundle);
  8. });
  9.  
  10.  
  11. function rebundle(bundle) {
  12. return bundle.bundle()
  13. .on('error',function(error) {
  14. console.log(error.stack,error.message);
  15. this.emit('end');
  16. })
  17. .pipe(
  18. gulpif(
  19. (process.env.NODE_ENV == 'production'),require('gulp-rename')('bundle.min.js'),require('gulp-rename')('bundle.js')
  20. )
  21. )
  22. .pipe(gulpif((process.env.NODE_ENV == 'production'),buffer()))
  23. .pipe(gulpif((process.env.NODE_ENV == 'production'),uglify()))
  24. .pipe(gulp.dest('dist/js'));
  25. }
  26.  
  27. return rebundle(bundle);
  28. });

在控制台……

  1. path.js:8
  2. throw new TypeError('Path must be a string. Received ' +
  3. ^
  4.  
  5. TypeError: Path must be a string. Received undefined
  6. at assertPath (path.js:8:11)
  7. at Object.posix.join (path.js:480:5)
  8. at Transform.stream._transform (/home/zipp/search-admin/node_modules/gulp-rename/index.js:52:22)
  9. at Transform._read (_stream_transform.js:167:10)
  10. at Transform._write (_stream_transform.js:155:12)
  11. at doWrite (_stream_writable.js:292:12)
  12. at writeOrBuffer (_stream_writable.js:278:5)
  13. at Transform.Writable.write (_stream_writable.js:207:11)
  14. 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)
  15. at emitOne (events.js:77:13)
  16. at Readable.emit (events.js:169:7)

解决方法

那个错误是因为你需要一个 vinyl-source-stream. .bundle()的结果是文件数据的标准节点流.您正在将数据传递给重命名,这需要Gulp File对象流.
  1. var source = require('vinyl-source-stream');
  2.  
  3. // stuff
  4.  
  5. function rebundle(bundle) {
  6. return bundle.bundle()
  7. .on('error',// Use 'source' here instead,which converts binary
  8. // streams to file streams.
  9. source('bundle.min.js'),source('bundle.js')
  10. )
  11. )
  12. .pipe(gulpif((process.env.NODE_ENV == 'production'),uglify()))
  13. .pipe(gulp.dest('dist/js'));
  14. }

您可以使用source来定义文件的初始名称,而不是使用重命名.

猜你在找的JavaScript相关文章