DEV Community

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

Posted on • Edited on

2

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

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay