如何在一个Gulp任务中使用browserify?

5jvtdoz2  于 2022-12-16  发布在  Gulp
关注(0)|答案(3)|浏览(160)

我对Gulp还是个新手,但是通过本教程,我设置了一个Gulp任务,该任务旨在浏览特定目录中的javascript文件,并将它们通过管道传输到另一个目录--非常简单。我看过其他一些教程,但是这个方法似乎是最简洁的。以下是我的代码:

var gulp = require('gulp');
var browserify = require('browserify');
var transform = require('vinyl-transform');

gulp.task('js', function() {
  var browserified = transform(function(filename) {
    return browserify(filename).bundle();
  });

  return gulp.src(['./public/js/src/**/*.js'])
    .pipe(browserified)
    .pipe(gulp.dest('./public/js/dist'));
});

上面的代码与我见过的许多其他这类实现非常相似,但是当我尝试使用gulp js运行它时,它产生了以下错误:

[15:47:13] Using gulp file
~/development/launchpad/workshop/gulpfile.js
[15:47:13] Starting 'js'...
_stream_readable.js:540
     var ret = dest.write(chunk);

               ^
TypeError: undefined is not a function
    at Producer.ondata (_stream_readable.js:540:20)
    at Producer.emit (events.js:107:17)
    at Producer.Readable.read (_stream_readable.js:373:10)
    at flow (_stream_readable.js:750:26)
    at resume_ (_stream_readable.js:730:3)
    at _stream_readable.js:717:7
    at process._tickCallback (node.js:355:11)

有人知道可能导致此错误的原因吗?
(As顺便说一句,我想看看堆栈跟踪中的文件,试图找出这里发生了什么,但在Spotlight中搜索_stream_readable. js会产生大约20个同名文件,所有文件似乎都是节点模块。是否有办法在堆栈跟踪中确定文件的完整路径?)

i1icjdpr

i1icjdpr1#

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

gulp.task('browserify', function() {
  return browserify('lib/front/app.js')
    .bundle()
    //Pass desired output filename to vinyl-source-stream
    .pipe(source('bundle.js'))
    // Start piping stream to tasks!
    .pipe(gulp.dest('public/build/'));
});
dwthyt8l

dwthyt8l2#

如果您希望browserify使用gulp. dest并创建一个文件,其中我们通过.pipe(gulp.dest('src/js'))指定它,那么您需要下载vinyl-source-stream并将其放入.pipe(source('bundle.js'))中,但实际上是在browserify中,即bundle方法接受回调,并且不需要dest或source

browserify({
  entries: jsFile,
  basedir: "src/js/dev",
  debug: true,
})
.transform(babelify, {
  presets: ['@babel/preset-env'],
})
.bundle((err, buffer) => {
  let event = new EventEmitter();
  if (err) {
    event.emit('error',err)
  }
  else {
    let data = minify(buffer.toString(), {}).code;
    fs.createWriteStream('./src/js/bundle.js').write(data)
    console.dir(222);
    bs.reload()
  } 
})
1rhkuytd

1rhkuytd3#

不幸的是,这是browserify/gulp的一个问题,nothing that vinyl-transform可以解决这个问题。解决方案是使用vinyl-source-streamvinyl-buffer

var gulp = require('gulp');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var glob = require('node-glob');

gulp.task('browserify', function (cb) {

  glob('./src/**/*.js', {}, function (err, files) {

    var b = browserify();
    files.forEach(function (file) {
        b.add(file);
    });

    b.bundle().
      .pipe(source('output.js'))
      .pipe(gulp.dest('./dist'));

    cb();
  })  
});

更多信息here.

相关问题