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



我想写一个函数,让你使用任何gulp插件作为一个简单的内存缓冲转换器(隐藏所有的流/乙烯基的东西)。例如,可以这样调用它:

const gulpMinifyHtml = require('gulp-minify-html');
transformBufferWithGulpPlugin(inputBuffer, gulpMinifyHtml()).then(outputBuffer => {
    // outputBuffer should now be a minified version of inputBuffer
});

(NB。我正在寻找一种通用的方法来做到这一点与任何 gulp插件;gulp-mini -html只是一个例子)


看起来很容易,但我绞尽脑汁地想把它做好。我想我需要做的是:

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

这些步骤基本正确吗?谁能告诉我一个工作的例子,或指向我一个模块,这样做吗?

下面应该可以工作。这里使用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属性的情况下工作。

最新更新