javascript - 如何通过 gulp 插件运行缓冲区?

标签 javascript gulp

我正在尝试编写一个函数,让您可以使用任何 gulp 插件作为简单的内存缓冲区转换器(隐藏所有流/乙烯基内容)。例如,可以这样调用:

const gulpMinifyHtml = require('gulp-minify-html');

transformBufferWithGulpPlugin(inputBuffer, gulpMinifyHtml()).then(outputBuffer => {
    // outputBuffer should now be a minified version of inputBuffer
});

(注意。我正在寻找一种使用任何 gulp 插件执行此操作的通用方法;gulp-minify-html 只是一个示例。)

<小时/>

看起来这很容易,但我正在费尽心思地试图让它发挥作用。我认为我需要做的是:

  1. 构造一个新的 Vinyl 实例,其内容设置为 inputBuffer
  2. 将此乙烯基实例放入对象流中(?)
  3. 通过 gulp 插件传输对象流
  4. 从流中收集输出
  5. 当流完成输出时,从乙烯基实例中获取内容缓冲区,并用它进行解析。

这些步骤基本正确吗?任何人都可以向我展示一个工作示例,或者向我指出一个可以实现该功能的模块吗?

最佳答案

以下内容应该有效。这使用 stream-array创建流。

var File = require('vinyl');
var streamify = require('stream-array');

function transformBufferWithGulpPlugin(inputBuffer, gulpPlugin) {
  return new Promise(function(resolve, reject) {
    streamify([new File({path:'dummy', contents:inputBuffer})])
      .pipe(gulpPlugin)
      .on('error', reject)
      .on('data', function(file) {
        resolve(file.contents);
    });
  });
}

var minify = require('gulp-html-minify');

transformBufferWithGulpPlugin(new Buffer('<p>\n Test \n</p>'), minify())
  .then(function(result) {
     console.log(result.toString());
  }, function(error) { 
     console.error(error);
  });

并非严格需要像上面那样指定虚拟 path (vinyl 不需要它),但某些插件可能仅在存在 路径属性。

关于javascript - 如何通过 gulp 插件运行缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956701/

相关文章:

javascript - 如何在 html 5 canvas 中删除区域的剪辑

javascript - Jasmine 依赖

javascript - 不使用组件时如何管理与 browserify 的依赖关系?

javascript - Jquery:单击删除内容后,如何用触发添加功能的按钮重置按钮?

php - 将 Javascript 数组制作成 JSON

javascript - package.json 中的 Node 引擎 8.x 或 10.x

linux - 安装 npm、nodejs - 使用 laravel gulp

javascript - 删除空文件的 Gulp 任务

php - 使用带有 PHP View 文件的 gulp 任务

javascript - .jshintignore 中的相对路径通配符不起作用?