我们正在使用gulp和run-sequence来构建具有以下序列的应用程序:
gulp.task('build', function(cb) {
runSequence(
'lint',
'clean',
'compile-templates',
'copy-dependencies',
'compile-styles',
'revall',
'cdnize',
'overlays',
cb
);
});
以下是单个任务的用法和用法(粘贴特定代码的时间很长,所以我试着简要介绍一下这些任务):
'编译模板':使用jade(~1.1.5)+ gulp-minify-html(^ 0.1.3),它获取我们所有的jade文件并将它们编译为html文件
' copy-dependencies':使用gulp-spa(0.2.2)+ gulp-uglify(^ 0.2.1)+ gulp-concat(^ 2.1.7)+ gulp-ngmin (^ 0.1.2),它聚合我们所有的javascript文件和角度模板,构建和缩小我们的vendor.js和app.js文件以及small / index.html和large / index.html文件。
'编译风格':使用gulp-compass(~1.1.3)+ gulp-minify-css(~0.3.1),它将我们的scss文件编译到我们的desktop.css中和mobile.css文件
' revall':使用gulp-rev-all(~0.3.0),负责加速所有以前生成的文件
' cdnize':使用gulp-cdnizer(^ 0.2.6),它用我们的js和css文件替换路径,用small / index.html和large中的CDN url更新它们/index.html文件
这是我们的'重叠'任务代码:
gulp.task('overlays', function() {
var styles = fs.readdirSync('./dist/styles');
var desktopCss = '';
var mobileCss = '';
for (var index in styles) {
var style = styles[index];
if (style.indexOf('desktop' + 'rev') > -1) {
desktopCss = style.replace('.css', '');
}
if (style.indexOf('mobile' + 'rev') > -1) {
mobileCss = style.replace('.css', '');
}
}
return gulp.src('./dist/large/index.html')
.pipe(plugins.replace('DIST_CSS', desktopCss))
.pipe(plugins.if(!isDev, gulp.dest('./dist/large')))
.pipe(gulp.src('./dist/small/index.html'))
.pipe(plugins.replace('DIST_CSS', mobileCss))
.pipe(plugins.if(!isDev, gulp.dest('./dist/small')));
});
要做很多事情,但没有什么比这更复杂了。 一切都通常运行得很好但是出于某种原因,有时候,我们遇到了一个我们无法理解的奇怪问题:
2个index.html文件最终没有所需的最终替换(在'覆盖'任务中发生的那些)
看起来运行序列块中的某些prev任务实际上仍然在运行下一个任务时运行(即' copy-dependencies'或' cdnize')
我们对所有任务进行了三重检查,所有这些任务都按照运行顺序的预期返回gulp管道。 从gulp输出来看,它看起来并不像是并行运行,但我们仍然有这些占位符而不是我们的值。
我想我们错过了一些关于gulp或我们正在使用的插件的内容,但我们无法真正理解为什么以及为什么。