Глоток-запоминание, кажется, выводит неправильный путь

[Использование 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())

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

Другие вопросы по тегам