我正在尝试编写一个函数,让您可以使用任何 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
- 将此乙烯基实例放入对象流中(?)
- 通过 gulp 插件传输对象流
- 从流中收集输出
- 当流完成输出时,从乙烯基实例中获取内容缓冲区,并用它进行解析。
这些步骤基本正确吗?任何人都可以向我展示一个工作示例,或者向我指出一个可以实现该功能的模块吗?
最佳答案
以下内容应该有效。这使用 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/