我想写一个函数,让你使用任何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只是一个例子)
看起来很容易,但我绞尽脑汁地想把它做好。我想我需要做的是:
- 创建一个新的
Vinyl
实例,内容设置为inputBuffer
- 将这个vinyl实例放入对象流(?)
- 将对象流通过gulp插件
- 从流中收集输出
- 当流完成输出时,从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
属性的情况下工作。