簡體   English   中英

口水龍頭進入無限循環

[英]gulp tap entering infinite loop

我試圖在glob流中獲取當前文件名,以便可以將其傳遞給jade以正確命名模板。 通常情況如下:

gulp.task('templatesjs', function() {
  gulp.src('src/templates/*.jade')
    .pipe(jade({
      client: true,
      name:"filenamehere"
    }))
    .pipe(gulp.dest('build/templates'))
});

我在網上發現提取流中文件名的唯一答案是使用gulp-tap:

gulp.task('templatesjs', function() {
  gulp.src('src/templates/*.jade')
    .pipe(tap(function(file, t) {
      var filename = file.relative.split('.')[0];
      return t.through(jade, [{client:true, name:filename}]);
    }))
    .pipe(gulp.dest('build/templates'))
});

但是由於某種原因,這會陷入無限循環。 例如,如果全局匹配index.jade,則將第一次迭代的file.relative設置為index.jade,但隨后陷入無限循環,其中file.relative設置為index.js,並且jade編譯器崩潰嘗試編譯index.js文件。 我之所以知道這是因為,如果我省略client:true選項,則file.relative在第一次迭代中就是index.jade,而在之后的所有迭代中都是index.html。 這當然不會崩潰,但是會陷入無限循環中,將index.html編譯為index.html。

我的解決方案是檢查文件擴展名,並且僅在我包含jade文件的迭代中才通過jade進行管道傳輸。 這解決了無限循環,但它很草率,並將一個jade文件復制到我的構建目錄中(不算什么)。 它也僅適用於第一個文件,之后的所有文件都將獲得第一個文件的名稱。 我知道我做錯了,但我不知道該怎么辦。

gulp.task('templatesjs', function() {
  gulp.src('src/templates/*.jade')
    .pipe(tap(function(file, t) {
      sourcefile = file.relative;
      filename = sourcefile.split('.')[0]
      if(sourcefile.split('.')[sourcefile.split('.').length-1]!='js')
        return t.through(jade, [{client:true, name:filename}]);
      else
        return t;
    }))
    .pipe(gulp.dest('build/templates'))
});

通過through您可以復制流,有效地創建流流,從而實現無限循環。

這應該工作:

gulp.task('templatesjs', function() {
  gulp.src('src/templates/*.jade')
    .pipe(tap(function(file, t) {
      var filename = file.relative.split('.')[0];
      return gulp.src(file.path)
               .pipe(jade({client:true, name:filename}))
               .pipe(gulp.dest('build/templates'));
    })) 
});

因此,我仍然不太了解乙烯基流或水龍頭,但至少我可以使用此工具來進行所有工作:

https://www.npmjs.com/package/gulp-jade-jst-concat

掙扎了4個小時后,在3分鍾內就開始工作了...

即使修改了示例,我也無法使其他模塊( https://www.npmjs.com/package/gulp-tree-concat )正常工作。 希望這對他們的客戶端gulp-jade模塊有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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