Gulp: ограничить параллелизм обработки файлов; избегать одновременной обработки * всех файлов *

#node.js #gulp

#node.js #gulp

Вопрос:

У меня есть большой список изображений (2874), которые необходимо оптимизировать, gulp-imagemin но ОС, по-видимому, ограничивает количество открытых файлов. Я могу изменить это с ulimit помощью, но это не кажется особенно переносимым и безопасным, учитывая количество файлов.

Это мой текущий код:

 function optimizeImages() {
    return gulp.src('images/*')
        .pipe(imagemin())
        .pipe(gulp.dest(dest));
}
 

Есть ли способ запустить плагин для подмножества файлов одновременно? Вот так

 function exampleTask() {
    return gulp.src('images/*')
        .pipe(limitConcurrency(imagemin(), 50))
        .pipe(gulp.dest(dest));
}
 

Ответ №1:

Оказывается, что Gulp был обновлен для исправления ошибки Error: EMFILE, too many open files недавно, но я еще не обновил. Теперь проблема параллелизма решается автоматически!

Я только что запустил это в своей папке проекта:

 npm update gulp
 

Комментарии:

1. Полезно знать. Одно предостережение: это не полностью решено: если вы выложите для запуска Phantom.js или что-то в этом роде, вы все еще можете превысить лимит, и, возможно, вам потребуется реализовать подход с использованием очереди вокруг таких команд.