0

我目前正在使用 throught2 模块编写 gulp 插件来替换缓冲区中的某些内容,下面是它的简化版本

module.exports = function(replaceData: DataChange | DataChange[]) {
  let count = 0;
  return through.obj(function (file: any, encoding: any, callback: any) {
    this.push(file);
    callback(null, file);
    console.log('@COUNT: ', ++count);
  });
};

我发现它只会拾取 8 个文件并将继续,忽略其他文件,我的输出将如下所示:

@COUNT: 1
@COUNT: 2
...
@COUNT: 8

如果我在回调中不返回任何内容

module.exports = function(replaceData: DataChange | DataChange[]) {
  let count = 0;
  return through.obj(function (file: any, encoding: any, callback: any) {
    this.push(file);
    callback();
    console.log('@COUNT: ', ++count);
  });
};

它将处理 16 个文件。如何增加通过会拾取的文件数量?

4

1 回答 1

0

我对 through2 的发现是期望从 Readable & Writable 继承的流。

默认可读/可写高水位标记为 16K。如果没有通过 2 转换流缓解压力的消费者,它会在 16 条记录后达到高水位线并缓冲。如果在回调中返回文件(案例 1),它是 8 个文件输入和 8 个文件输出,这就是它只选择 8 个文件的原因。

解决方案将传递给 through2 选项,即

return through.obj({highWaterMark: 32}, function (file: any, encoding: any, callback: any) {

在我的情况下,它将获取 32 个文件。

支持的选项包括:

  • highWaterMark(默认为 16)
  • 默认编码(默认为“utf8”)
  • encoding - 'utf8', 'base64', 'utf16le', 'ucs2' 等。如果指定,StringDecoder 解码器将附加到流中。
  • 可读 {布尔}
  • 可写的{布尔}
  • allowHalfOpen {boolean} 如果设置为 false,则当可写端结束时,流将自动结束可读端,反之亦然。

希望这会对您有所帮助并节省您的时间

于 2017-06-30T16:27:51.107 回答