使用 Through2 从乙烯基流创建多个文件
Creating multiple files from Vinyl stream with Through2
我一直在尝试自己解决这个问题,但还没有成功。我什至不知道如何开始研究这个(虽然我已经尝试了一些 Google 搜索,但无济于事),所以我决定在这里问这个问题。
是否可以从 Through2 Object Stream return 多个 Vinyl 文件?
我的用例是这样的:我通过流接收一个 HTML 文件。我想将文件的两个不同部分(使用 jQuery)和 return 隔离在两个单独的 HTML 文件中。我可以用一个部分(和一个结果 HTML 文件)来完成,但我完全不知道如何生成两个不同的文件。
有人可以帮我吗?
提前致谢。
基本方法是这样的:
使用 clone()
函数根据需要从输入文件创建尽可能多的输出文件。
修改.contents
property of each file depending on what you want to do. Don't forget that this is a Buffer,不是字符串。
修改 .path
property of each file so your files don't overwrite each other. This is an absolute path so use something like path.parse()
and path.join()
使事情变得更简单。
从 through2
transform function 中为您创建的每个文件调用 this.push()
。
这是一个将文件 test.txt
拆分为两个同样大的文件 test1.txt
和 test2.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'));
});
我一直在尝试自己解决这个问题,但还没有成功。我什至不知道如何开始研究这个(虽然我已经尝试了一些 Google 搜索,但无济于事),所以我决定在这里问这个问题。
是否可以从 Through2 Object Stream return 多个 Vinyl 文件?
我的用例是这样的:我通过流接收一个 HTML 文件。我想将文件的两个不同部分(使用 jQuery)和 return 隔离在两个单独的 HTML 文件中。我可以用一个部分(和一个结果 HTML 文件)来完成,但我完全不知道如何生成两个不同的文件。
有人可以帮我吗? 提前致谢。
基本方法是这样的:
使用
clone()
函数根据需要从输入文件创建尽可能多的输出文件。修改
.contents
property of each file depending on what you want to do. Don't forget that this is a Buffer,不是字符串。修改
.path
property of each file so your files don't overwrite each other. This is an absolute path so use something likepath.parse()
andpath.join()
使事情变得更简单。从
through2
transform function 中为您创建的每个文件调用this.push()
。
这是一个将文件 test.txt
拆分为两个同样大的文件 test1.txt
和 test2.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'));
});