2016-04-26 40 views
0

我一直試圖自己弄清楚這一點,但沒有成功。我甚至不知道如何開始研究(儘管我已經嘗試了一些Google搜索,但無濟於事),所以我決定在這裏提出這個問題。使用Through2從乙烯流創建多個文件

是否可以從Through2對象流中返回多個乙烯基文件?

我的用例是這樣的:我通過流接收一個HTML文件。我想要隔離文件的兩個不同部分(使用jQuery)並將它們返回到兩個單獨的HTML文件中。我可以用一個單獨的部分(和一個生成的HTML文件)來完成,但我完全不知道如何生成兩個不同的文件。

任何人都可以在這裏給我一隻手嗎? 在此先感謝。

回答

3

的基本方法是這樣的:

  1. ,因爲你需要使用clone()函數創建一個從輸入文件儘可能多的輸出文件。

  2. 根據您要執行的操作修改每個文件的.contents屬性。不要忘記,這是一個Buffer,而不是一個字符串。

  3. 修改每個文件的.path屬性,以使您的文件不會相互覆蓋。這是絕對路徑,所以請使用類似path.parse()path.join()的東西來簡化操作。

  4. 對於您創建的每個文件,請從through2 transform function中調用this.push()

下面是一個簡單的例子,分割文件test.txt成兩個同樣大的文件test1.txttest2.txt

var gulp = require('gulp'); 
var through = require('through2').obj; 
var path = require('path'); 

gulp.task('default', function() { 
    return gulp.src('test.txt') 
    .pipe(through(function(file, enc, cb) { 
     var c = file.contents.toString(); 
     var f = path.parse(file.path); 
     var file1 = file.clone(); 
     var file2 = file.clone(); 
     file1.contents = new Buffer(c.substring(0, c.length/2)); 
     file2.contents = new Buffer(c.substring(c.length/2)); 
     file1.path = path.join(f.dir, f.name + '1' + f.ext); 
     file2.path = path.join(f.dir, f.name + '2' + f.ext); 
     this.push(file1); 
     this.push(file2); 
     cb(); 
    })) 
    .pipe(gulp.dest('out')); 
}); 
+0

我不知道有一個.clone funcion。非常感謝你的幫助! –