NPM 5 — кратко о том, что принесла новая версия

NPM 5 — кратко о том, что принесла новая версия

31 мая все пользователи пакетного менеджера NPM (а им пользуется примерно 60% всех разработчиков на JavaScript, что составляет в сумме более 8 миллионов человек) наконец-то получили возможность обновить его до 5 версии. Что же принесла нам новая версия? Давайте быстро пробежимся по основным моментам.

Быстрее


Первое и самое главное отличие новой версии от предыдущей — улучшенная скорость работы. Если верить команде разработчиков, пятая версия NPM выполняет задачи от двух до шести раз быстрее. Забавный факт: по данным Business Wire, если сравнивать 4 и 5 версию, то при работе с 4 версией всем разработчикам мира каждые сутки приходится дополнительно тратить в общей сумме лишних 70 лет на ожидание завершения работы NPM. Это неудивительно, если учесть, что за последние три года количество зависимостей в среднем package.json выросло более чем в два раза.
Больше времени на разработку, меньше ожидания
Для того, чтобы достичь такого внушительного прироста в скорости, пришлось переписать механизм работы с кэшем, сделав его ещё более быстрым и отказоустойчивым. Теперь все записи в кэше проверяются на целостность, а при провале такой проверки автоматически удаляются и заново запрашиваются из хранилища. Конечно, есть небольшой минус — после обновления NPM придётся заново качать все закэшированные пакеты. Но это надо будет проделать всего один раз, так что минус действительно небольшой и плюсы его в итоге перевешивают.

И удобнее


Тем более, что скорость работы — не единственный плюс (кстати, быстрее работать стал не только кэш, но и механизм скачивания пакетов). Помимо этого, в пятой версии теперь есть lockfiles — файлы, сохраняющие список пакетов со строго фиксированными версиями для того, чтобы можно было собирать один и тот же проект на разных машинах без ошибок несовместимости версий пакетов. Конечно, раньше этого тоже можно было достичь, был shrinkwrap и можно было указывать конкретные версии прямо в package.json, но теперь lockfiles — это дефолтная опция при сборке.

Также при загрузке новых пакетов теперь они автоматически прописываются в зависимостях package.json, как если бы вы каждый раз вводили --save. Команды --save-dev и --save-optional при этом остаются без изменений. И, хотя и мелочь, а приятно — теперь имеющиеся в package.json отступы определяются автоматически, а вся добавляемая в файл информация располагается согласно обнаруженным отступам. А при выводе результата сборки больше нет необходимости смотреть на древовидные списки с зависимостями длиной в три экрана — теперь выводится только краткий итог.

В итоге


На данный момент по запросу «npm 5» гугл выдаёт в основном issues в гитхабе и темы на форумах вроде «после обновления npm мой проект не собирается», но, будем надеяться, баги скоро поправят и мы на какое-то время забудем про десятиминутные ожидания сборки bundle.js и будем наслаждаться быстрой и стабильной работой NPM. По крайней мере, до тех пор, пока количество зависимостей в среднем package.json не вырастет ещё в два раза.
Метки:
javascript, npm