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)