我的Gulp任务有问题。我用一个任务用gulp-mustache创建多个html文件,这样我最后有两个文件(index_de.html和index_en.html)。我有一个包含字符串的.json文件。一切正常。但我总是最终得到de或en两个文件,而不是每种语言一个文件。我已经尝试了creating tasks using a loop [gulp],但这不起作用。
编辑:澄清:两个文件都包含相同的内容。总是。似乎它会随机出现什么语言,但它总是一样的。
我的Gulp任务如下所示:
gulp.task('mustache', function () {
console.log('Found '+Object.keys(strings).length+' languages.');
for (var l in strings) {
var lang = strings[l];
(function(lang, l) {
gulp.src(buildpath+'/index.html')
.pipe(mustache(lang))
.pipe(rename('index_'+l+'.html'))
.pipe(compressor({
'remove-intertag-spaces': true,
'compress-js': true,
'compress-css': true
}))
.pipe(gulp.dest(destpath+'/'));
})(lang, l);
}
});
答案 0 :(得分:3)
我认为这里的一个选项是合并一系列gulp.src()
流并返回合并的流。以下是您修改的代码,以使用merge-stream
npm包(https://www.npmjs.com/package/merge-stream)。
var mergeStream = require('merge-stream');
gulp.task('mustache', function () {
console.log('Found ' + Object.keys(strings).length + ' languages.');
var tasks = [];
for (var l in strings) {
var lang = strings[l];
tasks.push(
gulp.src(buildpath + '/index.html')
.pipe(mustache(lang))
.pipe(rename('index_' + l + '.html'))
.pipe(compressor({
'remove-intertag-spaces': true,
'compress-js': true,
'compress-css': true
}))
.pipe(gulp.dest(destpath + '/'))
);
}
return mergeStream(tasks);
});
答案 1 :(得分:0)
您可以尝试async
var async = require('async');
gulp.task('build', function (done) {
var tasks = [];
for (var i = 0; i < config.length; i++) {
tasks.push(function () {
var tmp = config[i];
return function (callback) {
gulp.src(tmp.src)
.pipe( blah blah blah
))
.pipe(gulp.dest(tmp.dest))
.on("end", callback);
}
}());
}
async.parallel(tasks, done);
});