Javascript 如何获得browserify';s";捆绑;函数发出结束事件?
假设我有一些相对通用的browserify脚手架,打算与gulp一起使用:Javascript 如何获得browserify';s";捆绑;函数发出结束事件?,javascript,node.js,gulp,browserify,browser-sync,Javascript,Node.js,Gulp,Browserify,Browser Sync,假设我有一些相对通用的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: f
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();
})
吞咽4输出:
[timestamp]以下任务未完成:js
[timestamp]您忘记发出异步完成信号了吗?
但是,bundle()
本身不会发出“end”事件,因此下面会出现相同的错误:
gulp.task('js', function(callback) {
bundle().on('end', callback);
});
如何让此函数在最后一次调用
.pipe()
后发出“end”事件,或者以其他方式让gulp 4识别任务已完成?我不知道根本的问题是什么,但删除管道中的驱魔行修复了我的问题。您面临的问题是传递回调,而且不打电话。如果callback
未定义,则只需返回一个流
下面应该可以做到这一点:
gulp.task('js', function () { return bundle(); });
这应该是:
gulp.task('js', function (cb) { bundle().on('end', cb); });
您可以返回或调用回调,但不要将两者混用
我可能错了,但我认为一般的建议是返回