2016-04-26 46 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。非常感谢你的帮助! –