gulp-remember似乎输出了错误的路径

时间:2015-10-12 01:51:58

标签: javascript gulp gulp-rename gulp-cached

[使用gulp 3.9.0,gulp-cached 1.1.0,gulp-remember 0.3.0,gulp-rename 1.2.2]

我们正在使用gulp作为构建工具并与gulp一起gulp-cached记住允许快速增量重建。构建中的部分文件必须移动到不同的输出目录,这必须在流中发生(即不在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();
});

在只有一个文件“myfile.js”的源目录src上运行它会产生输出文件:

/build/resources/resources/myfile.js

如果第二次调用build()被删除,它会正确生成

/build/resources/myfile.js

如果我们插入第三次调用build(),它会产生

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

我们如何解决这个问题?不应该记得输出文件的最后一次经过它们的路径,然后再进行处理吗?

1 个答案:

答案 0 :(得分:1)

应用转换后应调用remember。所以在这种情况下:

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

(我猜你已经解决了这个问题。但是答案可能对某人有所帮助。)