[Использование глотка 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
Как мы можем исправить это? Не следует ли запоминать выходные файлы с указанием пути, который они имели, когда они проходили через последний раз, прежде чем они были обработаны дальше?