使用缓冲区
以下是有关创建操作缓冲区的 gulp 插件的一些信息。
编写插件 > 使用缓冲区
使用缓冲区
如果你的插件依赖于基于缓冲区的库,你可能会选择将插件基于 file.contents 作为缓冲区。让我们实现一个在文件前添加一些文本的插件:
var through = require('through2');
var PluginError = require('plugin-error');
// 常量
const PLUGIN_NAME = 'gulp-prefixer';
// 插件级函数(处理文件)
function gulpPrefixer(prefixText) {
if (!prefixText) {
throw new PluginError(PLUGIN_NAME, 'Missing prefix text!');
}
prefixText = new Buffer(prefixText); // 提前分配
// 创建一个每个文件都会通过的流
var stream = through.obj(function(file, enc, cb) {
if (file.isStream()) {
this.emit('error', new PluginError(PLUGIN_NAME, 'Streams are not supported!'));
return cb();
}
if (file.isBuffer()) {
file.contents = Buffer.concat([prefixText, file.contents]);
}
// 确保文件通过下一个 gulp 插件
this.push(file);
// 告诉流引擎我们已完成处理此文件
cb();
});
// 返回文件流
return stream;
};
// 导 出插件主函数
module.exports = gulpPrefixer;
上述插件可以这样使用:
var gulp = require('gulp');
var gulpPrefixer = require('gulp-prefixer');
gulp.src('files/**/*.js')
.pipe(gulpPrefixer('prepended string'))
.pipe(gulp.dest('modified-files'));
处理流
不幸的是,上述插件在非缓冲(流式)模式下使用 gulp.src 时会出错。如果 可能,你也应该支持流。有关更多信息,请参阅处理流。