我怎样才能得到browserify的“捆绑”function发出结束事件?
说我有一些相对普通的browserify脚手架打算用于吞咽:
var browserSync = require('browser-sync').create(); var browserify = require('browserify'); var gutil = require('gulp-util'); var exorcist = require('exorcist'); var bundler = browserify('app.jsx', { debug: false, extensions: ['.jsx'], cache: {}, packageCache: {} }); function bundle() { return bundler.bundle() .on('error', function(err) { gutil.log(err.message); browserSync.notify('Browserify error!'); this.emit('end'); }) .pipe(source('app.js')) .pipe(transform(function () { return exorcist('public/js/app.js.map'); })) .pipe(gulp.dest('public/js')) .pipe(browserSync.stream({ once: true })) }
我的问题是,gulp 4需要明确的通知完成任务,如上所述的bundle()
不提供:
gulp.task('js', function(callback) { return bundle(); })
Gulp 4输出:
[timestamp] The following tasks did not complete: js
[timestamp] Did you forget to signal async completion?
但是, bundle()
本身并不会发出“end”事件,所以下面的错误是一样的:
gulp.task('js', function(callback) { bundle().on('end', callback); });
如何让这个函数在最后一个.pipe()
调用之后发出'end'事件,或者根据API文档获取.pipe()
4来识别任务完成?
你面临的问题是传递callback
,而不是调用它。 如果callback
未定义,则只需返回一个stream。
以下应该做的伎俩:
gulp.task('js', function () { return bundle(); });
应该如此:
gulp.task('js', function (cb) { bundle().on('end', cb); });
您要么返回或调用callback ,不要混合两者。
我可能在这里是错的,但我认为一般的build议是返回。
我不知道底层的问题是什么,但是删除pipe道中的驱魔线可以解决我的问题。