gpt4 book ai didi

javascript - 使用流创建插件 gulp

转载 作者:行者123 更新时间:2023-11-29 19:42:10 25 4
gpt4 key购买 nike

我创建了用于在 json 文件中发送 json 数据的插件。

但我不明白为什么在管道中发送我的对象 json,而不是直接在我的插件中写入文件。

我想使用我的插件语法:

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;

你的想法

最佳答案

没有什么能阻止你这样做......除了not respecting plugins guidelines !

用户实际上假设一个插件将流式传输文件并且他们可以将它们通过管道传输到其他插件。

如果我的代码正确无误,那么您正在尝试生成一个包含入站文件的所有 sha 哈希值的文件。为什么不让用户获取此文件并将其通过管道传递给其他插件?您会对人们的能力感到惊讶。

虽然这个问题看起来有点基于意见,但您绝对可以将重点放在如何处理可能不属于主流文件的文件上。在许多插件中都可以找到这样的问题;例如,gulp-uglify authors are wondering how they can add source-maps without mixing js and source map downstream .

关于javascript - 使用流创建插件 gulp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22403350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com