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

时间:2016-08-15 14:09:21

标签: 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. 当流完成输出时,从乙烯基实例中获取内容缓冲区,然后解决它。
  6. 这些步骤基本正确吗?任何人都可以向我展示一个有效的例子,还是指向一个可以做到这一点的模块?

1 个答案:

答案 0 :(得分:1)

以下内容应该有效。这使用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,但有些插件可能仅在存在path属性时才有效。