[使用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
我们如何解决这个问题?不应该记得输出文件的最后一次经过它们的路径,然后再进行处理吗?
答案 0 :(得分:1)
应用转换后应调用remember
。所以在这种情况下:
.pipe(cached())
.pipe(rename(function(path) {path.dirname = "resources/" + path.dirname;}))
.pipe(remember())
(我猜你已经解决了这个问题。但是答案可能对某人有所帮助。)