![](/img/trans.png)
[英]How do I pass gulp frontmatters output to another plugin in Gulp?
[英]How do I write a gulp plugin that uses other gulp plugins?
我有一個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
的功能?
即使有人指出我正確的方向,我也可以解決它,並將解決方案作為其他人的答案。 謝謝!
gulp插件的作用是返回一個流,它將使用另一個流中的數據:
readable.pipe(writable);
當您嘗試制作gulp插件時,您無法直接訪問正在讀取的流。 您只能訪問它傳遞給您的數據(例如,乙烯基文件)。
這樣你就無法以傳統的方式管道。 您要做的是重用部分管道。
要輕松實現這一目標,請嘗試使用lazypipe
:
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');
記住不要在這里調用流創建函數,lazypipe會為你調用它們。
希望我幫了。
由於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很受歡迎,所以我很高興它被使用了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.