npm i или npm ci?
jennypollard
Posted on February 23, 2023
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
Posted on February 23, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.