web-dev-qa-db-ja.com

gulp-newerとgulp-changed

それらの違いは何ですか?

gulp-newer

gulp.src(imgSrc)
  .pipe(newer(imgDest))
  .pipe(imagemin())
  .pipe(gulp.dest(imgDest));

gulp-changed

gulp.src(SRC)
    .pipe(changed(DEST))
    // ngmin will only get the files that
    // changed since the last time it was run
    .pipe(ngmin())
    .pipe(gulp.dest(DEST));

Gulp-changedはオプションを提供するため、より強力なようです

hasChanged: changed.compareLastModifiedTime
45
Frank Fang

この質問に答えるのに遅すぎないことを願っています。最近のプロジェクトでは、両方をソースコードレベルで評価する必要がありましたが、ここに私の見解を示します。

gulp-newer

コアでは、このプラグインはソースファイルとdestファイルの変更時刻を比較し( node API を参照)、ソースファイルがdestファイルより新しいか、destファイルがまったくないかを判断します。プラグインの関連コードは次のとおりです。

var newer = !destFileStats || srcFile.stat.mtime > destFileStats.mtime;

gulp-changed

このプラグインはデフォルトで、ファイルの変更時間を使用して、ストリームを通過させるものを決定します

function compareLastModifiedTime(stream, cb, sourceFile, targetPath) {}

しかし、ファイルのコンテンツSHA1ハッシュを比較するオプションを提供することにより、さらに一歩進んでいます。

function compareSha1Digest(stream, cb, sourceFile, targetPath) {}

この情報はうまく書かれています 文書化された

結論

理論的に言えば、gulp-changedのデフォルトのhasChanged: changed.compareLastModifiedTime、各プラグインは他のプラグインと比べて比較的高速です。 gulp-changedのhasChanged: changed.compareSha1Digest、gulp-changedがファイルコンテンツのSHA1ハッシュを作成するため、少し遅くなると予想するのが妥当です。ベンチマークは行いませんでしたが、いくつかの数値を見ることにも興味があります。

どちらを選ぶか

純粋にその背後にある開発者(sindresorhus)のために、gulpが変更されました。いつかこの素晴らしい男が彼のgulpプラグインのサポートをやめると決めたら、gulpの使用を完全にやめると思います。

冗談はさておき、gulp-changedのソースコードはgulp-yです。一方、gulp-newerのソースは、多くの約束を持つ他のノードモジュールのソースとほとんど同じように読み取ります。 gulp-changedのための別の+1 :)

巨大な編集

Gulp-changedは1:1のsource:destマッピングでのみ機能します。多数必要な場合:1 gulp concatで使用する場合は、代わりにgulp-newerを選択してください。

72
Lim H.

gulp-newy をお勧めします。ここで、独自の関数でパスとファイル名を操作できます。次に、関数をnewy()へのコールバックとして使用します。これにより、比較するファイルを完全に制御できます。

これにより、1対1または多対1の比較が可能になります。

newy(function(projectDir, srcFile, absSrcFile) {
  // do whatever you want to here. 
  // construct your absolute path, change filename suffix, etc. 
  // then return /foo/bar/filename.suffix as the file to compare against
}

enter image description here

5
dman

この質問に答えるためには、両方のプラグインのソースコードを比較する必要があります。

Gulp-changedには、あなたが言ったようにより多くのオプションがあり、より多くの時間をダウンロードし、より多くの貢献者がいるようです。

それらのドキュメントのために、違いを生むことができる何か。

例では、gulp-newerの場合、次のように使用されます。

gulp.task('default', function() {
  gulp.watch(imgSrc, ['images']);
});

したがって、このタスクが実行されると、このプラグインの使用中に変更されるファイルのみに気付くようです。

Gulp-changedでは、「前回の実行以降に変更されたファイルのみを取得します」と彼らは言います。だから、私はこれを実際の例で試しませんでした。すべてのファイルを処理し、最後の実行以降に変更されたファイルのみを処理するため、すべてのファイルと内部を常に「見る」ようです(md5ハッシュ?手がかり、ソースをチェックしなかった)が、最後の実行以降にファイルが変更されたと判断するそのためにウォッチャーは必要ありません。

これはすべて、公式のドキュメントを読むだけでした。

「テスト中」は大歓迎です!

4
avcajaraville