我有一个gulp任务,用于预编制包含以下内容的把手模板:
gulp.src(['templates/*.hbs'])
.pipe(handlebars())
.pipe(declare({
namespace: 'Template.templates',
noRedeclare: true
}))
.pipe(concat('compiled.js'))
.pipe(header('Template = {};\nTemplate.render = function(templateName, context) { return Handlebars.template(Template.templates[templateName])(context) };\n'))
.pipe(gulp.dest('templates'));
我想创建一个包装此功能的gulp插件,使其更易于使用,如下所示:
gulp.src(['templates/*.hbs'])
.pipe(handlebars2())
.dest('templates')
或选项:
gulp.src(['templates/*.hbs'])
.pipe(handlebars2({
filename: 'compiled.js',
namespace: 'Template'
}))
.dest('templates')
编写gulp插件的文档和我看过的示例源代码只显示了stream的用法,我不知道如何应用它来利用我自己的其他gulp插件。
如何编写gulp插件来完成上述handlebars2
的功能?
即使有人指出我正确的方向,我也可以解决它,并将解决方案作为其他人的答案。谢谢!
答案 0 :(得分:1)
gulp插件的作用是返回一个流,它将使用另一个流中的数据:
lazypipe
当您尝试制作gulp插件时,您无法直接访问正在阅读的流。您只能访问它传递给您的数据(例如,乙烯基文件)。
这样你就无法以传统方式管道。您要做的是重用部分管道。
要轻松实现此类目标,请尝试使用var lazypipe = require('');
var handlebars2 = lazypipe()
.pipe(handlebars)
.pipe(declare,{
namespace: 'Template.templates',
noRedeclare: true
})
.pipe(concat,'compiled.js')
.pipe(header,'Template = {};\nTemplate.render = function(templateName, context) { return Handlebars.template(Template.templates[templateName])(context) };\n');
:
sed -e '1,244d' /home/user/Documents/working_files/storage/file.txt <> /home/user/Documents/working_files/storage/file.txt
请记住,不要在此处调用流创建功能,lazypipe会为您调用它们。
希望我能帮到你。
答案 1 :(得分:1)
由于gulp插件只是处理流,因此您可以使用stream-combiner
:
var combine = require('stream-combiner');
function coffeePipe() {
return combine(
coffeescript(),
coffeelint.reporter('fail').on('error', function(){
gutil.beep();
gulp.run('lint');
});
};
//usage:
gulp.src().pipe(coffeePipe());
https://github.com/OverZealous/lazypipe/issues/4#issuecomment-36785601
我发现了lazypipe的作者发表的评论:
老实说,当我创建lazypipe时,我希望我刚刚想到了后一种解决方案。它真的是一样的,只是稍微冗长一点,并解决了同样的问题。 lazypipe非常受欢迎,所以我很高兴它被使用了!