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
Ответы
Ответ 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 "на дикий тест" будет очень приветствоваться!