Подтвердить что ты не робот

Gulp -newer vs 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
4b9b3361

Ответ 1

Надеюсь, что не поздно ответить на этот вопрос. Мне пришлось оценивать их обоих на уровне исходного кода для недавнего проекта, и вот мой вопрос.

gulp -newer

В основе этого плагина сравнивается время изменения источника и файла dest (см. node API), чтобы решить, является ли исходный файл более новым, чем файл dest или если файл dest отсутствует вообще. Вот связанный код в плагине:

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

gulp -Изменен

Этот плагин по умолчанию также использует время, модифицированное файлом, для принятия решения о том, чтобы пройти через поток

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

но он идет еще на один шаг, предлагая вариант сравнения содержимого файла SHA1:

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

Эта информация красиво документирована.

Заключение

Теоретически говоря, если вы используете gulp -измененный по умолчанию hasChanged: changed.compareLastModifiedTime, каждый плагин относительно быстро, как другой. Если вы используете gulp -changed hasChanged: changed.compareSha1Digest, разумно ожидать, что gulp -изменяется немного медленнее, потому что он создает хэш SHA1 содержимого файла. Я не тестировал, но меня тоже интересует некоторое количество.

Что выбрать

gulp - изменен, из-за разработчика за ним (sindresorhus). Если однажды этот удивительный человек решит, что он перестанет поддерживать свои плагины gulp, я думаю, что вообще не буду использовать gulp.

Шутка в сторону, однако, gulp -измененный исходный код gulp -y, в то время как gulp -повторный источник очень похож на другой источник node с большим количеством promises. Итак, еще один +1 для gulp -changed:)

ОГРОМНОЕ ИЗОБРАЖЕНИЕ

gulp -изменяется только работа с 1:1 источником: dest mapping. Если вам нужно много: 1, например. при использовании с gulp concat выберите gulp -newer вместо.

Ответ 2

Могу ли я предложить 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
}

введите описание изображения здесь

Ответ 3

Чтобы ответить на этот вопрос, вам придется сравнить исходный код плагинов.

Кажется, что gulp -changed имеет больше опций, как вы сказали, больше используется (это было больше времени на загрузку) и больше участников, таким образом, он мог быть более обновлен и реорганизован, поскольку он использовался больше.

Что-то, что может изменить ситуацию, из-за их документации.

В примере, для gulp -newer, он используется следующим образом:

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

Таким образом, кажется, что, как только эта задача будет запущена, она будет замечать только файлы, которые меняются при использовании этого плагина.

В gulp -changed они говорят: "будут получать только файлы, которые были изменены с момента последнего запуска". Итак, и я не пробовал это на рабочем примере, что gulp -changed proccess все файлы, а затем только те, которые были изменены с момента последнего выполнения, так что он всегда будет "смотреть" на все файлы и внутренне (md5-хэш? no clue, не проверял источник) решают, в то время как файл изменился с момента последнего выполнения. Для этого не нужен наблюдатель.

Все это, только чтение их официальной документации.

A "на дикий тест" будет очень приветствоваться!