Gulp 在多个任务上有条件地吞食concat

Gulp 在多个任务上有条件地吞食concat,gulp,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.

我有一个名为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));
});
然后,我想在--env=prod时添加一些额外的步骤,如果:

gulp.task('app', ['clean-app'], function(){
    return gulp.src(config.inputs.app)
        **.pipe(gulpif(env === 'prod', uglify()))**
        .pipe(gulp.dest(config.outputs.root));
});
这个很好用。我想做的最后一件事是从这些子任务中吞下所有js文件。我想我可以使用gulpif从每个任务返回一个流,而不是转到gulp.dest,但是我仍然需要有条件地运行一个任务来组合这些流和concat


有更好的方法吗?

与其将所有内容都放在一个构建任务中,为什么不为
编译
构建产品
设置一个单独的任务呢。这将使您的代码更易于维护,并且不那么脆弱

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

函数jsBaseTasks(){
返回gulp.src(config.inputs.app);
}
gulp.task('build',function(){jsBaseTasks().pipe(…);//etc}
或者,如果您有可重用代码块,您可以使用来构建这些代码块,并根据需要使用它们:

var jsProcess=lazypippe()
.pipe(jshint、jshintOptions)
.pipe(/*其他吞咽插件*/);
gulp.task('build',function(){gulp.src(…).pipe(jsProcess()).pipe(gulp.dest());}
另外,我认为将生产版本和开发版本构建到同一位置是一个坏主意。您可能会在某个时候意外地部署开发版本


如果这有助于理解我的意思的话,我有一个建议,但听起来你已经有很多工作要做了。

一定要把你的任务分成尽可能多的小模块,然后尽可能地坚持干燥原则

在您的情况下。例如,您可能只有一个标准的
dev
任务可以让您启动并运行,并且可能在开发过程中运行一些
watch
任务和通用的
build
任务。当您要为发布部署代码时,您可能有一些选项配置,定义要为r推送的文件除此之外,您可能还有一个
release
任务,它查看配置文件,然后收集您需要的所有源、进程、concat、uglifies等,然后输出到指定的构建目标

旁注:最新版本的
gulp watch
更容易遵循干式原则,因为现在可以将数组作为回调函数传递


如果你需要帮忙的话,我很乐意与你分享一些gulpfiles。

是的,你对脆弱性的看法可能是对的,事实上-如果我有很多环境,我会到处都有if语句,嗯。这些都是很好的选择,我会努力让它们为我工作。p.s我不是在同一个位置建造的,我的配置file是从env变量config=require('./build.config.gulp')(env)生成的