Gulp插件学习
- 具备知识,参考文章:
github-stream-handbook
gulp-编写插件
- 开始编写一个插件(gulp-prefix), 用来在文件的前面插入所传的字符
- 在项目的根目录下,新建文件夹
node_modules/gulp-prefix
, 建立package.json和index.js - 以数据流的形式处理数据
const through = require('through2');
function prefixStream(prefixText) {
let stream = through();
stream.write(prefixText);
return stream;
}
module.exports = function gulp_prefix(prefix) {
if (!prefix) {
prefix = '';
}
let stream = through.obj(function (chunk, enc, callback) {
if (chunk.isStream()) {
// 定义转换内容的 streamer
let streamer = prefixStream(chunk);
// 从 streamer 中捕获错误,并发出一个 gulp的错误
streamer.on('error', this.emit.bind(this, 'error'));
// 开始转换
chunk.contents = chunk.contents.pipe(streamer);
} else if (chunk.isBuffer()) {
let prefixBuffer = new Buffer(prefix); // 类型为Unit8Array
chunk.contents = Buffer.concat([prefixBuffer, chunk.contents]);
} else {
return callback()
}
this.push(chunk);
callback();
})
return stream;
}
工具测试
gulp.task('prefix', function () {
return gulp.src('src/*.js')
.pipe(prefix('prefix data'))
.pipe(gulp.dest('js/'))
})
输出
prefix datafunction add(a, b) {
return a + b;
}