Глоток-запоминание, кажется, выводит неправильный путь
[Использование gulp 3.9.0, gulp-cached 1.1.0, gulp-запомнить 0.3.0, gulp-rename 1.2.2]
Мы используем gulp в качестве инструмента для сборки и gulp-cached вместе с gulp-Remember, чтобы позволить быстрое инкрементальное перестроение. Часть файлов в процессе сборки должна быть перемещена в другой выходной каталог, и это должно происходить в потоке (то есть не в gulp.dest()), потому что мы потом архивируем результаты. Для этого мы используем gulp-rename.
Однако, когда скрипт сборки вызывается несколько раз (gulp.watch() для инкрементных перестроений), он, кажется, применяет преобразование gulp-rename несколько раз. Похоже, что gulp-Remember на самом деле выводит файлы не с тем путем, который видел их в прошлый раз, а с путем, который они получили после шага gulp-rename.
Я сузил проблему до следующего сценария:
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();
});
Выполнение этого в исходном каталоге src только с одним файлом "myfile.js" приводит к выходному файлу:
/build/resources/resources/myfile.js
Если второй вызов build() удален, он выдает правильно
/build/resources/myfile.js
И если мы вставим третий вызов build(), он выдаст
/build/resources/resources/resources/myfile.js
Как мы можем это исправить? Не должен ли gulp-запомнить выводить файлы с тем путем, который у них был, когда они проходили через него в прошлый раз, прежде чем они были обработаны дальше?
1 ответ
Вам следует позвонить remember
после преобразований. Итак, в этом случае:
.pipe(cached())
.pipe(rename(function(path) {path.dirname = "resources/" + path.dirname;}))
.pipe(remember())
(Я думаю, что вы уже решили эту проблему. Но, возможно, ответ поможет кому-то.)