我试图编写一个函数,让你使用任何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只是一个示例。)
这似乎很容易,但是我试图让它的头发变得有效。我想我需要做的是:
Vinyl
实例,其内容设置为inputBuffer
这些步骤基本正确吗?任何人都可以向我展示一个有效的例子,还是指向一个可以做到这一点的模块?
答案 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
属性时才有效。