[gulp 3.9.0、gulp-cached 1.1.0、gulp-remember 0.3.0、gulp-rename 1.2.2 を使用]
ビルド ツールとして gulp を使用し、gulp-remember と一緒に 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();
});
これをソース ディレクトリ src で 1 つのファイル "myfile.js" だけで実行すると、出力ファイルが生成されます。
/build/resources/resources/myfile.js
build() の 2 番目の呼び出しを削除すると、正しく生成されます
/build/resources/myfile.js
そして、build() への 3 番目の呼び出しを挿入すると、生成されます。
/build/resources/resources/resources/myfile.js
どうすればこれを修正できますか? gulp-remember は、ファイルがさらに処理される前に、最後に通過したときのパスでファイルを出力するべきではありませんか?