我有一个名为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来做这个,如果这有助于看到我的意思,但听起来你已经有很多工作已经在你的.