npm — менеджер пакетов по умолчанию для проектов Node.js.
Вы должны были использовать либо npm install, либо npm iдля установки зависимостей, если проект основан на npm.
Теперь npm v6 выпустил новую команду: npm ci
Команда npm ci аналогична npm install, за исключением того, что она предназначена для использования в автоматизированных средах, таких как тестовые платформы, непрерывная интеграция (ci) и развертывание (cd) — или в любой ситуации, когда вы хотите убедиться, что вы выполняете чистую установку своих зависимостей.
npm ci
будет значительно быстрее, если:
- Имеется файл
package-lock.json
илиnpm-shrinkwrap.json
. - Папка
node_modules
отсутствует или пуста.
Давайте сначала посмотрим, как npm install или npm iработает
- Он установит все зависимости.
- Если вы используете
^
или~
при указании версии своей зависимости, npm может установить не ту версию, которую вы указали. npm install
может обновить вашpackage-lock.json
при внесении изменений, например при установке новой зависимости.
Теперь давайте посмотрим, чем npm ci отличается от npm i.
- Проект должен иметь существующий
package-lock.json
илиnpm-shrinkwrap.json
. - Если зависимости в блокировке пакета не совпадают с зависимостями в
package.json
,npm ci
завершится с ошибкой вместо обновления блокировки пакета. npm ci
может устанавливать только проекты целиком: с помощью этой команды нельзя добавить отдельные зависимости.- Если
node_modules
уже присутствует, он будет автоматически удален до того, какnpm ci
начнет установку. - Он никогда не будет записывать в
package.json
или любую из блокировок пакетов: установки по существу заморожены. - Он удалит вашу папку node_modules, чтобы обеспечить чистое состояние.
- Он будет искать в вашем package-lock.json, чтобы установить все зависимости с точной версией.
- В отличие от npm install, npm ci никогда не изменит ваш package-lock.json.
что использовать и когда (при условии, что у вас уже есть npm v6, иначе обновите его):
- Используйте
npm install
для установки новых зависимостей или для обновления существующих зависимостей (например, для перехода с версии 1 на версию 2). - Используйте
npm ci
при непрерывной интеграции или если вы хотите установить зависимости без изменения файлаpackage-lock.json
.
Я надеюсь, что эта статья поможет вам решить, когда лучше использовать npm i и npm ci.