首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Through2从乙烯基流创建多个文件

用Through2从乙烯基流创建多个文件
EN

Stack Overflow用户
提问于 2016-04-26 15:12:20
回答 1查看 2.5K关注 0票数 2

我一直想自己想办法解决这个问题,但还没有成功。我甚至不知道如何开始研究这个问题(虽然我已经尝试过一些谷歌搜索,但没有结果),所以我决定在这里问这个问题。

是否有可能从Through2对象流返回多个Vinyl文件?

我的用例是:我通过流接收一个HTML文件。我希望隔离文件的两个不同部分(使用jQuery),并将它们返回到两个单独的HTML文件中。我可以用一个部分(和一个生成的HTML文件)来完成这个任务,但是我完全不知道如何生成两个不同的文件。

有人能帮我一把吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-26 15:59:42

基本方法如下:

  1. 使用clone()函数从输入文件中创建尽可能多的输出文件。
  2. 根据需要修改每个文件的.contents属性。不要忘记这是一个缓冲区,而不是一个字符串。
  3. 修改每个文件的.path属性,这样您的文件就不会相互覆盖。这是一条绝对的路径,所以使用像path.parse()path.join()这样的方法可以使事情变得更简单。
  4. this.push()中为您创建的每个文件调用变换函数

下面是一个快速示例,它将一个文件test.txt分解为两个同样大的文件test1.txttest2.txt

代码语言:javascript
复制
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'));
});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36868974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档