在这样的片段中:

gulp.task "coffee", ->
    gulp.src("src/server/**/*.coffee")
        .pipe(coffee {bare: true}).on("error",gutil.log)
        .pipe(gulp.dest "bin")

gulp.task "clean",->
    gulp.src("bin", {read:false})
        .pipe clean
            force:true

gulp.task 'develop',['clean','coffee'], ->
    console.log "run something else"

在开发任务中,我想要干净地运行,在它完成后,运行咖啡,当它完成时,运行其他东西。但是我想不出来。这个零件坏了。请建议。


当前回答

我一直在寻找这个答案。现在我在gulp的官方文档里找到了。

如果你想在最后一个任务完成时执行gulp任务,你必须返回一个流:

饮而尽。任务('wiredep', ['dev-jade'],函数(){ Var stream = gulp.src(路径。输出+ '*.html') .pipe ($ .wiredep ()) .pipe (gulp.dest (paths.output)); 返回流;//当此任务完成时执行下一个任务 }); //首先执行并完成wiredep任务 饮而尽。任务('prod-jade', ['wiredep'],函数(){ gulp.src(路径。输出+ '**/*.html') .pipe ($ .minifyHtml ()) .pipe (gulp.dest (paths.output)); });

其他回答

默认情况下,gulp同时运行任务,除非它们有显式的依赖关系。这对于像clean这样的任务不是很有用,在这些任务中,您不希望依赖它们,但您需要在所有其他任务之前运行它们。

我专门用gulp编写了run-sequence插件来解决这个问题。安装后,像这样使用它:

var runSequence = require('run-sequence');

gulp.task('develop', function(done) {
    runSequence('clean', 'coffee', function() {
        console.log('Run something else');
        done();
    });
});

您可以在README包上阅读完整的说明-它还支持同时运行一些任务集。

请注意,这将在gulp的下一个主要版本中(有效地)修复,因为他们完全消除了自动依赖顺序,并提供类似于run-sequence的工具,允许您手动指定您想要的运行顺序。

然而,这是一个重大的突破性变化,所以当您现在可以使用run-sequence时,没有理由等待。

这个问题的唯一好的解决方案可以在gulp文档中找到:

var gulp = require('gulp');

// takes in a callback so the engine knows when it'll be done
gulp.task('one', function(cb) {
  // do stuff -- async or otherwise
  cb(err); // if err is not null and not undefined, the orchestration will stop, and 'two' will not run
});

// identifies a dependent task must be complete before this one begins
gulp.task('two', ['one'], function() {
  // task 'one' is done now
});

gulp.task('default', ['one', 'two']);
// alternatively: gulp.task('default', ['two']);

等着看任务是否完成,然后剩下的,我是这样做的:

gulp.task('default',
  gulp.series('set_env', gulp.parallel('build_scss', 'minify_js', 'minify_ts', 'minify_html', 'browser_sync_func', 'watch'),
    function () {
    }));

荣誉:https://fettblog.eu/gulp-4-parallel-and-series/

我使用生成器-gulp-webapp Yeoman生成器生成了一个node/gulp应用程序。它是这样处理“干净的难题”的(翻译成问题中提到的原始任务):

gulp.task('develop', ['clean'], function () {
  gulp.start('coffee');
});

试试这个技巧:-) 吞咽v3。x针对异步错误的Hack

我在Readme中尝试了所有的“官方”方法,它们都不适合我,但是这个方法管用。你也可以升级到gulp 4。x,但是我强烈建议你不要这样做,这样会弄坏很多东西。你可以使用一个真正的js承诺,但嘿,这是快速,肮脏,简单:-) 基本上你可以使用:

var wait = 0; // flag to signal thread that task is done
if(wait == 0) setTimeout(... // sleep and let nodejs schedule other threads

看看这个帖子!