0

変更されていないファイルで時間のかかるタスクが発生するのを防ぐために、gulp-changedを使用しようとしています。私のgulpfile.jsは次のように設定されています:

gulp.task("min:css", function () {
    return gulp.src([paths.css, "!" + paths.minCss])
        .pipe(changed("."))
        .pipe(concat(paths.concatCssDest))
        .pipe(autoprefixer({ browsers: ['> 5%'] }))  //support browsers with >5% market share
        .pipe(cssmin())
        .pipe(gulp.dest("."));
});

ただし、すべてが実行されているのを見るたびに:

[11:15:02] Starting 'min:js'...
[11:15:02] Starting 'min:css'...
[11:15:02] Finished 'min:css' after 79 ms
Process terminated with code 0.
[11:15:02] Finished 'min:js' after 121 ms
[11:15:02] Starting 'min'...
[11:15:02] Finished 'min' after 12 μs

gulp-changedがこれらの変更されていないファイルをフィルタリングしていない理由はありますか?

4

1 に答える 1

1

まずgulp-changed、実際に何をしているのかを誤解しているようです。gulp-changedタスクの実行を妨げることはできません。つまり、次の 2 行です。

[11:15:02] Starting 'min:css'...
[11:15:02] Finished 'min:css' after 79 ms

単一の CSS ファイルが変更されていなくても、gulp のログ出力に表示されます。変更されていないファイルをストリームから単純に削除して、後の段階gulp-changedに到達しないようにします。pipe()ファイルは、到達するまで処理されますchanged()

(偶然にも、私はちょうど昨日、その操作モードを扱い、対比する回答を書いた.gulp-changedあまりにも興味深いかもしれません.)gulp.watch()gulp-watch

第二gulp-changedに、ファイルが変更されたかどうかをどのように知るのですか? ソース ファイルと宛先ファイルを比較します。宛先ファイルがソース ファイルよりも古い場合は、ソース ファイルが変更されている必要があります。

これが機能するにgulp-changedは、ソース ファイルから宛先ファイルにマップできる必要があります。ただし、複数のソース ファイルと 1 つの宛先ファイル (連結ファイル) しかありません。つまり、ソース ファイルから宛先ファイルにマップするカスタムhasChangedハンドラーを提供する必要があります。

第三に、それをすべて行ったとしても、タスクが思い通りに機能しない可能性があります。gulp-changedそれらのファイルのみが変更されているため、それらのファイルのみが連結された出力ファイルになります。

と を連結したいfoo.cssbar.cssall.cssます。これは初めてうまくいくでしょう。しかし、その後変更するbar.cssと、のみ bar.cssが になりall.cssます。

常にすべての CSS ファイルを入力として必要とするため、 と組み合わせて使用​​することはできませんgulp-changedgulp-concat

そうは言ってもmin:css、タスクが呼び出されたときにタスクを高速化したい場合は、公式の Gulp.js インクリメンタル リビルド レシピgulp.watch()に従うことができます。

gulp.task("min:css", function () {
  return gulp.src([paths.css, "!" + paths.minCss])
    .pipe(cached('cssCache'))
    .pipe(autoprefixer({ browsers: ['> 5%'] }))
    .pipe(cssmin())
    .pipe(remember('cssCache'))
    .pipe(concat(paths.concatCssDest))
    .pipe(gulp.dest("."));
});
于 2016-03-23T18:43:17.060 に答える