Я пытаюсь получить текущее имя файла внутри потока glob, чтобы я мог передать его jade, чтобы правильно назвать мои шаблоны. Обычно это будет выглядеть так:gulp tap enter бесконечный цикл
gulp.task('templatesjs', function() {
gulp.src('src/templates/*.jade')
.pipe(jade({
client: true,
name:"filenamehere"
}))
.pipe(gulp.dest('build/templates'))
});
Единственный ответ, который я нашел в Интернете, чтобы извлечь имя файла в потоке с помощью глотка отводов:
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'))
});
Но по какой-то причине это входит в бесконечный цикл. Если glob соответствует index.jade, например, файл file.relative первой итерации устанавливается как index.jade как ожидаемый, но затем он попадает в бесконечный цикл, где file.relative установлен в index.js, а сбой jade-компилятора пытаясь скомпилировать файл index.js. Причина, по которой я это знаю, состоит в том, что, если я не укажу клиент: true, file.relative - index.jade на первой итерации и index.html на всех итерациях после. Это, конечно, не сбой, но застревает в бесконечном цикле, компилируя index.html в index.html.
Мое решение состоит в том, чтобы проверять расширение файла и обрабатывать его только через нефрит, если я нахожусь в итерации, содержащей нефритовый файл. Это решает бесконечный цикл, но он неаккуратно и копирует файл нефрита в мой каталог сборки (а не огромную сделку). Он также работает только с первым файлом, и все файлы после получения имени первого файла. Я знаю, что делаю что-то не так, но я не могу понять, что.
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'))
});
устранил проблему с копированием файла нефрита в каталог сборки путем изменения «вернуться т;» вернуться;" в блоке else. – Nicholas