使用stream创建gulp插件
Create plugin gulp with stream
我创建了在json文件中发送json数据的插件。
但是我不明白为什么在管道中发送我的对象json,而不是在我的插件中直接写file。
我想使用我的插件的语法:
gulp.task('js-hash', function()
{
// Get all js in redis
gulp.src('./build/js/**/*.js')
.pipe(getHashFile('/build/js/'))
.pipe(gulp.dest('./build/js/hash.json'));
});
gulp.task('js-hash', function()
{
// Get all js in redis
gulp.src('./build/js/**/*.js')
.pipe(getHashFile('./build/js/hash.json', '/build/js/'));
});
这是我的插件:
var through = require('through2');
var gutil = require('gulp-util');
var crypto = require('crypto');
var fs = require('fs');
var PluginError = gutil.PluginError;
// Consts
const PLUGIN_NAME = 'get-hash-file';
var json = {};
function getHashFile(filename, basename)
{
if (!filename) {
throw PluginError(PLUGIN_NAME, "Missing filename !");
}
// Creating a stream through which each file will pass
var stream = through.obj(function (file, enc, callback) {
if (file.isNull()) {
this.push(file); // Do nothing if no contents
return callback();
}
if (file.isBuffer()) {
var hash = crypto.createHash('sha256').update(String(file.contents)).digest('hex');
json[file.path.replace(file.cwd+basename, '')] = hash;
return callback();
}
if (file.isStream()) {
this.emit('error', new PluginError(PLUGIN_NAME, 'Stream not supported!'));
return callback();
}
}).on('finish', function () {
fs.writeFile(filename, JSON.stringify(json), function(err) {
if (err) {
throw err;
}
});
});
// returning the file stream
return stream;
}
// Exporting the plugin main function
module.exports = getHashFile;
你的主意
没有什么可以阻止你这样做…除了不尊重插件指南!
用户实际上假设一个插件可以流式传输文件,并且他们可以将它们管道到其他插件。
如果我得到你的代码是正确的,你试图生成一个文件,其中包含入站文件的所有sha哈希。为什么不让用户获取此文件并将其管道传输到其他插件呢?你会惊讶于人们能做什么。
虽然这个问题看起来有点基于意见,但你绝对可以把重点放在如何处理那些可能不属于主流文件的文件上。像这样的问题可以在许多插件中找到;例如,gulp-uglify的作者想知道如何在不混合js和源映射的情况下添加源映射。
相关文章:
- 如何在Angular2中使用jQuery插件
- 可以前端maven插件使用节点,npm已经安装
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 我的jQuery插件参数没有正确启动,遇到了问题
- 吞咽Gulp If.如何调用几个插件
- gulp-watch 插件不会在新文件上触发
- Gulp 插件来做一个 JavaScript “include”
- 我的 gulp 插件带有 through2 以奇怪的类似 XML 格式返回文件
- 按gulp / browserify顺序加载javascript插件
- gulp-我必须为每个项目安装插件吗
- 在开发过程中使用webstorm调试gulp插件的最佳方法是什么?
- Gulp插件包括/排除行JS代码取决于任务运行
- Gulp插件" Gulp过滤器"未按预期恢复流中的文件
- Gulp-ruby-sass插件不抛出错误,只记录错误本身
- 在一个Gulp插件中处理多个文件
- 我如何将gulp frontmatters输出传递到gulp中的另一个插件
- gulp插件可以接收一个文件并返回多个文件吗?
- 如何通过gulp插件运行缓冲区
- Gulp加载插件错误dep未定义
- 使用stream创建gulp插件