簡體   English   中英

如何編寫使用其他gulp插件的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM