Gulp 使用流式组合器2和大口4

Gulp 使用流式组合器2和大口4,gulp,gulp-4,Gulp,Gulp 4,我正在尝试将stream-combiner2与我的Gulp 4任务结合使用,如中所建议的。然而,我总是收到: The following tasks did not complete: build:js Did you forget to signal async completion? 我已经阅读了非常好的信息,但在我的任务中应用这些信息时遇到了困难。以下是我所拥有的: const browserify = require('browserify') const buffer = requi

我正在尝试将stream-combiner2与我的Gulp 4任务结合使用,如中所建议的。然而,我总是收到:

The following tasks did not complete: build:js
Did you forget to signal async completion?
我已经阅读了非常好的信息,但在我的任务中应用这些信息时遇到了困难。以下是我所拥有的:

const browserify = require('browserify')
const buffer = require('vinyl-buffer')
const combiner = require('stream-combiner2')
const gulp = require('gulp')
const jsDest = 'static/js'
const jsPath = 'build/js'
const jsSrc = `${jsPath}/**/*.js`
const source = require('vinyl-source-stream')
const sourcemaps = require('gulp-sourcemaps')
const uglify = require('gulp-uglify')

gulp.task('build:js', function () {
    const combined = combiner.obj([
        browserify({
        entries: `${jsPath}/main.js`,
        debug: true
        }),
        source(`${jsPath}/main.js`),
        buffer(),
        sourcemaps.init({ loadMaps: true }),
        uglify(),
        sourcemaps.write('./'),
        gulp.dest(jsDest)
    ])

    combined.on('error', console.error.bind(console))

    return combined
})

经过几个小时的黑客攻击,我厌倦了这项任务,根本没有做我想做的事情。请看帖子上的评论,然后求助于不推荐的。这是该插件的解决方案,但我完全愿意接受一个能够正确地将stream-combiner2与browserify结合起来的答案,因为这样会更好

const combiner = require('stream-combiner2')
const gulp = require('gulp')
const jsDest = 'static/js'
const jsSrc = 'build/js/*.js'
const sourcemaps = require('gulp-sourcemaps')
const uglify = require('gulp-uglify')

gulp.task('build:js', function () {
const combined = combiner.obj([
    gulp.src(jsSrc),
    sourcemaps.init(),
    browserify(),
    uglify(),
    sourcemaps.write('.'),
    gulp.dest(jsDest)
])

combined.on('error', console.error.bind(console))

return combined
})
不知怎的,我错过了这个。它让我最终得到了我想要的东西,包括格式良好的错误处理:

const browserify = require('browserify')
const buffer = require('gulp-buffer')
const combiner = require('stream-combiner2')
const gulp = require('gulp')
const gutil = require('gulp-util')
const jsDest = 'static/js'
const jsSrc = 'build/js/*.js'
const sourcemaps = require('gulp-sourcemaps')
const tap = require('gulp-tap')
const uglify = require('gulp-uglify')

gulp.task('build:js', function () {
    const combined = combiner.obj([
        gulp.src(jsSrc, { read: false }),
        tap(function (file) {
            gutil.log('bundling ' + file.path)
            file.contents = browserify(file.path, { debug: true }).bundle()
        }),
        buffer(),
        sourcemaps.init({ loadMaps: true }),
        uglify(),
        sourcemaps.write('./'),
        gulp.dest(jsDest)
    ])

    combined.on('error', console.error.bind(console))

    return combined
})

看起来你的代码应该可以正常工作。您可以尝试functiondone方法。然后在末尾调用done,而不是返回combined,看看这是否有帮助。实际上,您不必有一个真正的done函数。你也可以调用缓冲区,我看不出有这样的要求。啊,在我减少测试用例的努力中,我确实错过了缓冲区的要求。谢谢此外,我尝试了你的建议,但似乎任务没有做任何事情来构建文件。。。我可能需要就此提出一个新问题。我唯一的其他建议是删除browserify,看看这是否导致了问题。假设你确定你的路径经过几个小时的尝试,我已经求助于不推荐的!!!吞下browserify,因为它完全符合我的要求,几乎不复杂。谢谢@Mark的帮助!我已经在第二个答案中解决了这个问题。第二个答案比这个好得多,但留给后人,因为这是一个很好的快速参考,以防有人从gulp browserify迁移到新的方式。