2015-10-12 2 views
0

[Использование глотка 3.9.0, проглатывать кеширования 1.1.0, проглатывать запоминающийся 0.3.0, проглатывать переименованию 1.2.2]глотка запоминающиеся, кажется, выходной неправильный путь

Мы используем глотку как инструмент сборки и gulp-cached вместе с gulp-помните, чтобы позволить быстрые инкрементные перестройки. Часть файлов в сборке должна быть перенесена в другую директорию вывода, и это должно произойти в потоке (т. Е. Не в gulp.dest()), потому что после этого мы отбрасываем результаты. Для этого мы используем gulp-rename.

Однако, если скрипт сборки вызывается несколько раз (gulp.watch() для инкрементных перестроек), то он, похоже, многократно применяет преобразование gulp-rename. Похоже, что gulp-remember на самом деле не выводит файлы с пути, который он видел в последний раз, но с путём, который они получили после шага переименования.

Я сузили проблему до следующего сценария:

var gulp = require('gulp'); 
var cached = require('gulp-cached'); 
var remember = require('gulp-remember'); 
var rename = require('gulp-rename'); 

function build() { 
    gulp.src("src/**") 
     .pipe(cached()) 
     .pipe(remember()) 
     .pipe(rename(function(path) {path.dirname = "resources/" + path.dirname;})) 
     .pipe(gulp.dest('build/')); 
} 

gulp.task('default', [], function() { 
    build(); 
    build(); 
}); 

Запуск этого на исходный каталог СРК с только один файл «myfile.js» производит выходной файл:

/build/resources/resources/myfile.js 

Если второй вызов построить() удаляется, он производит правильно

/build/resources/myfile.js 

И если мы вставляем THI rd call to build(), производит

/build/resources/resources/resources/myfile.js 

Как мы можем исправить это? Не следует ли запоминать выходные файлы с указанием пути, который они имели, когда они проходили через последний раз, прежде чем они были обработаны дальше?

ответ

1

После применений преобразований вы должны позвонить remember. Так что в этом случае:

.pipe(cached()) 
.pipe(rename(function(path) {path.dirname = "resources/" + path.dirname;})) 
.pipe(remember()) 

(.. Я думаю, вы решили эту проблему уже Но, может быть, ответ будет кому-то помочь)

Смежные вопросы