【发布时间】:2016-01-12 20:02:31
【问题描述】:
假设我有一些相对通用的 browserify 脚手架,打算与 gulp 一起使用:
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() 不会自行发出“结束”事件,所以下面会出现同样的错误:
gulp.task('js', function(callback) {
bundle().on('end', callback);
});
如何让这个函数在最后一次.pipe() 调用之后发出“结束”事件,或者让 gulp 4 识别任务已完成according to the API docs?
【问题讨论】:
标签: javascript node.js gulp browserify browser-sync