Найти в Дзене

В чем отличие npm i от npm ci?

npm ci и npm i (или npm install) — это команды для установки зависимостей в Node.js, но они используются в разных контекстах и имеют различия в поведении. Рассмотрим их подробнее: В общем, npm install используется в процессе разработки, когда вам нужно управлять зависимостями, а npm ci — в ситуациях, где важна точность и предсказуемость установки, таких как автоматизированные сборки и деплой.
Оглавление

npm ci и npm i (или npm install) — это команды для установки зависимостей в Node.js, но они используются в разных контекстах и имеют различия в поведении. Рассмотрим их подробнее:

1. npm install (или npm i)

  • Основное назначение: Устанавливает зависимости, указанные в package.json.
  • Что делает:
  • Если нет файла node_modules или некоторые зависимости отсутствуют, команда установит их.
  • Если существует package-lock.json, npm install попытается установить зависимости в соответствии с ним. Если каких-то зависимостей нет, они будут добавлены в node_modules, а изменения будут сохранены в package-lock.json.
  • Если package-lock.json отсутствует, npm install создаст его на основе зависимостей, указанных в package.json.
  • Может обновлять или добавлять новые зависимости, если они не зафиксированы в package-lock.json.
  • Когда использовать:
  • При разработке, когда нужно установить новые зависимости или обновить существующие.
  • Когда нужно установить зависимости, но вы готовы к тому, что package-lock.json может измениться.

2. npm ci

  • Основное назначение: Устанавливает зависимости в строгом соответствии с версиями, зафиксированными в package-lock.json.
  • Что делает:
  • Полностью удаляет директорию node_modules перед установкой зависимостей.
  • Устанавливает зависимости исключительно на основе package-lock.json. package.json используется только для валидации, чтобы убедиться, что версии совпадают.
  • Команда не изменяет и не обновляет package-lock.json. Если есть расхождения между package.json и package-lock.json, команда завершится с ошибкой.
  • Когда использовать:
  • При развертывании проекта в CI/CD pipeline (непрерывной интеграции), чтобы гарантировать, что зависимости будут установлены точно так, как они были зафиксированы.
  • Когда необходимо строгое соответствие версий зависимостей, например, в продакшене, чтобы избежать неожиданных изменений.
  • Для быстрой и гарантированной установки зависимостей, без изменения package-lock.json или node_modules.

Основные отличия

  • npm ci всегда будет использовать package-lock.json и никогда не изменяет его, в то время как npm install может изменять package-lock.json в зависимости от версии зависимостей.
  • npm ci полностью удаляет node_modules перед установкой, обеспечивая чистую установку зависимостей, тогда как npm install только добавляет или обновляет зависимости.

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