DEV Community

Cover image for npm i или npm ci?
jennypollard
jennypollard

Posted on • Updated on

npm i или npm ci?

npm i vs npm ci — какую команду использовать.

npm i (npm install)

npm i устанавливает пакеты и их зависимости в директорию node_modules. По-умолчанию, список пакетов берется из раздела dependencies в package.json.

npm обновляет файл package-lock.json после любых измений package.json или node_modules. То есть, если в результате выполнения какой-либо команды npm, будет обновлен package.json или содержимое node_modules, то будет обновлен package-lock.json.

package-lock.json описывает фактическое дерево пакетов, которое было уставновлено и нужен для того, чтобы выполнение npm i приводило к одному и тому же набору пакетов. Другими словами, package-lock.json это описание того, что установлено в node_modules.

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

npm ci

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

  • удаляет node_modules перед установкой.
  • npm ci требует для работы наличие package-lock.json, иначе получим ошибку:

npm ERR! cipm can only install packages with an existing package-lock.json or npm-shrinkwrap.json with lockfileVersion >= 1. Run an install with npm@5 or later to generate it, then try again.

  • npm ci не может устанавливать пакеты по-одному, устанавливает все сразу как описано в package-lock.json.
  • npm ci не обновляет package-lock.json и package.json, так как предназначен для автоматики, а в этом случае репозиторий только на чтение.
  • если версии пакетов в package.json и package-lock.json расходятся, команда завершится с ошибкой:

npm ERR! cipm can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with npm install before continuing.
npm ERR! Invalid: lock file's lodash.get@4.4.2 does not satisfy lodash.get@4.4.0

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


Photo by Paul Teysen on Unsplash

Top comments (0)