npm — менеджер пакетов по умолчанию для проектов Node.js.

Вы должны были использовать либо npm install, либо npm iдля установки зависимостей, если проект основан на npm.

Теперь npm v6 выпустил новую команду: npm ci

Команда npm ci аналогична npm install, за исключением того, что она предназначена для использования в автоматизированных средах, таких как тестовые платформы, непрерывная интеграция (ci) и развертывание (cd) — или в любой ситуации, когда вы хотите убедиться, что вы выполняете чистую установку своих зависимостей.

npm ci будет значительно быстрее, если:

  • Имеется файл package-lock.json или npm-shrinkwrap.json.
  • Папка node_modules отсутствует или пуста.

Давайте сначала посмотрим, как npm install или npm iработает

  • Он установит все зависимости.
  • Если вы используете ^ или ~ при указании версии своей зависимости, npm может установить не ту версию, которую вы указали.
  • npm install может обновить ваш package-lock.json при внесении изменений, например при установке новой зависимости.

Теперь давайте посмотрим, чем npm ci отличается от npm i.

  • Проект должен иметь существующий package-lock.json или npm-shrinkwrap.json.
  • Если зависимости в блокировке пакета не совпадают с зависимостями в package.json, npm ci завершится с ошибкой вместо обновления блокировки пакета.
  • npm ci может устанавливать только проекты целиком: с помощью этой команды нельзя добавить отдельные зависимости.
  • Если node_modules уже присутствует, он будет автоматически удален до того, как npm ci начнет установку.
  • Он никогда не будет записывать в package.json или любую из блокировок пакетов: установки по существу заморожены.
  • Он удалит вашу папку node_modules, чтобы обеспечить чистое состояние.
  • Он будет искать в вашем package-lock.json, чтобы установить все зависимости с точной версией.
  • В отличие от npm install, npm ci никогда не изменит ваш package-lock.json.

что использовать и когда (при условии, что у вас уже есть npm v6, иначе обновите его):

  • Используйте npm install для установки новых зависимостей или для обновления существующих зависимостей (например, для перехода с версии 1 на версию 2).
  • Используйте npm ci при непрерывной интеграции или если вы хотите установить зависимости без изменения файла package-lock.json.

Я надеюсь, что эта статья поможет вам решить, когда лучше использовать npm i и npm ci.