2014-10-09 114 views
2

我的Gulp任務有問題。我使用一個任務來創建多個帶有大嘴鬍子的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

如何在同一個目錄下有兩個同名的文件?或者你的意思是說這兩個文件的內容是一樣的? – 2014-10-09 19:30:02

+0

這兩個文件都包含相同的內容。總是。似乎隨機會使用什麼語言,但它總是一樣的。 – Owlbertz 2014-10-09 19:36:49

+0

'buildpath'從哪裏來?它的價值是什麼樣子? – Ben 2014-10-13 18:55:32

回答

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); 
}); 
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); 
});