有条件的gulp连接多个任务

Dan*_*Dan 8 gulp

我有一个名为build的gulp任务,它使用子任务将我的源的各个部分移动到build文件夹:

gulp.task('build', ['jshint', 'templates', 'app', 'components', 'stylesheets', 'assets', 'index']);

gulp.task('app', ['clean-app'], function(){
    return gulp.src(config.inputs.app)
        .pipe(gulp.dest(config.outputs.root));
});
Run Code Online (Sandbox Code Playgroud)

然后我想在--env = prod时添加一些额外的步骤,我用gulp-if做了:

gulp.task('app', ['clean-app'], function(){
    return gulp.src(config.inputs.app)
        **.pipe(gulpif(env === 'prod', uglify()))**
        .pipe(gulp.dest(config.outputs.root));
});
Run Code Online (Sandbox Code Playgroud)

这很好用.我想做的最后一件事就是从这些子任务中吞下所有js文件.我想我可以使用gulpif从每个任务返回一个流而不是去gulp.dest,但我仍然需要以某种方式有条件地运行一个任务来组合这些流和concat.

有一个更好的方法吗?

Ove*_*ous 14

而不是将所有内容都推到一个构建任务中,为什么不为compile或单独执行任务build-prod.这将使您的代码更易于维护,并且不那么脆弱.

您仍然可以通过将这些任务封装在函数中来重用部分任务:

function jsBaseTasks() {
    return gulp.src(config.inputs.app);
}

gulp.task('build', function() { jsBaseTasks().pipe(...); // etc }
Run Code Online (Sandbox Code Playgroud)

或者,如果您有可重复使用的代码块,则可以使用lazypipe构建它们并根据需要使用它们:

var jsProcess = lazypipe()
                    .pipe(jshint, jshintOptions)
                    .pipe(/* other gulp plugin */);

gulp.task('build', function() { gulp.src(...).pipe(jsProcess()).pipe(gulp.dest()); }
Run Code Online (Sandbox Code Playgroud)

此外,我认为将生产和开发构建构建到同一位置是一个坏主意.您将在某个时刻意外地部署开发构建.

我有一个相当大的gulpfile来做这个,如果这有助于看到我的意思,但听起来你已经有很多工作已经在你的.