Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获得browserify';s";捆绑;函数发出结束事件?_Javascript_Node.js_Gulp_Browserify_Browser Sync - Fatal编程技术网

Javascript 如何获得browserify';s";捆绑;函数发出结束事件?

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

假设我有一些相对通用的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();
})
吞咽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); });
您可以返回或调用回调,但不要将两者混用

我可能错了,但我认为一般的建议是返回