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 installbefore 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)