С сегодняшнего дня все пользователи npm могут использовать преимущество новой команды установки, называемой «npm ci». Команда предоставляет массивные улучшения в производительности и надёжности сборок для процессов непрерывной интеграции и непрерывного деплоя, предоставляя последовательный и быстрый опыт для разработчиков, использующих CI/CD в своей работе.

Что это за ботва такая?


npm ci игнорирует package.json пакета и устанавливает модули руководствуясь локфайлом (package-lock.json). Это позволяет создавать воспроизводимые сборки: вы получаете именно то, что ожидаете при каждой установке.

Ранее, разработчики, которые желали получить синхронизированные node_mobules и package.json, архивировали свою папку node_modules. npm ci заменяет этот процесс единственной командой.

Почему?


Это быстро.





npm ci быстрый — в некоторых случаях, в два раза быстрее npm i. Он предоставляет значительное увеличение производительности для всех разработчиков, использующих непрерывную интеграцию.

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

npm ci обещает, что наибольшее преимущество получат большие команды. Возможность давать разработчикам «подписываться» на файл блокировки способствует более эффективной совместной работе в больших командах, и возможность установки именно того, что описано в файле блокировки, потенциально может сохранить десятки, если не тысячи, рабочих часов в месяц, позволяя командам тратить больше своего времени на создание и поддержку прекрасных вещей.

Это увеличивает надёжность


npm ci также предоставляет дополнительные варианты улучшения надёжности билдов вашего приложения. Как дополнительная инсталляционная команда, npm ci может быть использована для возвращения к изначальному состоянию, если npm i завершился с ошибкой, и наоборот. Это значительно снижает вероятность неудачной установки.

Как?


npm ci доступен сразу же после обновления на самую последнюю версию npm: выполните npm install -g npm@latest. Для больших подробностей о релизе обратитесь к логу изменений.

Что вы думаете?


Мы желаем знать как это работает для вас в том числе. Вопросы? Результаты? Хотите поделиться тем, что вы и ваша команда создали? Пишите нам.

Комментарии (4)


  1. justboris
    09.03.2018 12:18
    +2

    Все хорошо, полезное улучшение. Но непонятно, почему так много времени понадобилось для реализации такой простой идеи — устанавливать модули по package-lock.json, невзирая package.json.


    Складывается впечатление, что сами разработчики npm своим детищем не особо пользуются, и хорошим практикам ci не следуют


    1. saggid Автор
      09.03.2018 20:56

      Большой и сложный проект + малое число контрибьютеров. Основных разрабов там два человека, как я понимаю.


  1. yarkov
    11.03.2018 11:57

    Я один не понимаю что здесь происходит? А по вашему npm до этого чем занимался? Если был lock файл, то он из него и ставил зависимости.


    1. saggid Автор
      11.03.2018 12:42

      Там дело в том, что команда npm i изменяла существующий package-lock.json на новый, как написано в док-ции к этому файлу:


      package-lock.json is automatically generated for any operations where npm modifies either the node_modules tree, or package.json.

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


      Более подробно об особенностях npm ci можно, опять же, почитать в документации к этому методу.


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