8

連結された JS ファイルを生成する gulp タスクがあります。プロジェクト内のすべてのファイルへの変更を検出するためにウォッチを使用しています。最後の実行以降にソース ファイルが変更された場合にのみ、concat タスクでファイルを再連結したいと考えています。

注: より具体的な監視コマンドを使用することもできますが、実際の本番環境では、ソース JS ファイルの複数の組み合わせから複数の連結された JS ファイルを生成しているため、これらのそれぞれに対して監視とタスクを作成するのははるかに複雑です。

このようなもの:

gulp.task('scripts', function() {
   return gulp.src('src/**/*.js')
      .pipe(cache('scripts'))
      // If no changed files in pipeline, exit pipeline, 
      // else add in all src files again
      .pipe(concat('app.js'))
      .pipe(gulp.dest('build/'));
});

最後の 2 つのステップで lazypipe を使用することを考えたので、ファイルがある場合にのみ concat と dest を実行しますが、次の方法がわかりません。

  • パイプラインにまだファイルが残っているかどうかに基づいて条件を実行します (cache() の後)
  • すべてのソース ファイルを元に戻します (基本的に、gulp.src() を再発行してストリームを再準備します)。

2 番目の部分に gulp-remember を使用できることはわかっていますが、本番環境では、可能であればストリームを再構築するだけの方がはるかにクリーンです。

以前にこれをやった人はいますか、どこから始めるべきかについてのヒントはありますか?

4

3 に答える 3

3

moettinger の回答 (執筆時点) のコードは正しくありません。返されるストリームは次のとおりです。

return gulp.src('src/**/*.js')
   .pipe(newer('build/app.js'))
   .pipe(concat('app.js'))
   .pipe(gulp.dest('build/'));

単一の宛先に対してテストする場合newer()、現在のディレクトリ (または絶対パス) に対する相対パスを呼び出しに渡す必要があります。で指定されたパスに対して解釈されるパスにすることはできませんgulp.dest()。呼び出しでは、ファイルが見つからないためnewer('app.js')newer呼び出しは常に実行されます。concat

ドキュメントにも同様の例があります

于 2015-10-01T16:34:32.983 に答える
1

プラグインgulp-newerがうまくいくはずです。

   gulp.task('scripts', function() {
   return gulp.src('src/**/*.js')
      .pipe(newer('app.js'))
      .pipe(concat('app.js'))
      .pipe(gulp.dest('build/'));
});
于 2014-07-28T15:16:02.047 に答える
0

これは古い質問ですが、gulp-newer 情報に追加するだけだと思いました。Gulp-newer は、ファイルのタイムスタンプに基づいて変更を検出します。ファイルが削除された場合、gulp-newer はこの変更を検出しません。

このため、CSSファイルの1つが削除または変更された場合にメインの連結ファイルを生成する必要があるため、新しいものではなくキャッシュルートをたどることを検討していますが、gulp newerはこれらすべてをサポートしていません。

于 2015-10-01T12:36:45.420 に答える