【问题标题】:Creating multiple files from Vinyl stream with Through2使用 Through2 从 Vinyl 流创建多个文件
【发布时间】:2016-04-27 00:23:13
【问题描述】:

我一直试图自己解决这个问题,但还没有成功。我什至不知道如何开始研究这个(虽然我已经尝试了一些谷歌搜索,但无济于事),所以我决定在这里问这个问题。

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

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

有人可以帮帮我吗? 提前致谢。

【问题讨论】:

    标签: node.js gulp through2


    【解决方案1】:

    基本方法是这样的:

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

    【讨论】:

    • 我不知道有 .clone 函数。非常感谢您的帮助!
    • 4 年后,您的回答结束了为这些信息进行的数小时谷歌搜索......在典型的 Gulp 管道中有如此多的插件/依赖项,很难了解哪个库将解决给定的问题!就我而言,我已经在使用 through2 但不知道我应该仔细看看!呃流很难。感谢您提供详细的示例!
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 2021-02-03
    • 1970-01-01
    • 2015-04-08
    • 2019-06-19
    • 1970-01-01
    • 2017-01-20
    • 2021-05-14
    相关资源
    最近更新 更多