[英]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.