Коротка відповідь
juniornpm install — це команда, що встановлює залежності з package.json і оновлює package-lock.json, дозволяючи змінювати версії. npm ci — це швидка, чиста інсталяція, що читає package-lock.json і встановлює точні версії без змін. У CI‑пайплайнах використовується npm ci для стабільності та швидкості.
Повне пояснення
Що це і навіщо
-
npm install– загальна команда для встановлення залежностей. Вона читаєpackage.json, шукає потрібні пакети, встановлює їх і оновлюєpackage-lock.json(абоnpm-shrinkwrap.json). Це корисно під час розробки, коли треба додати нові пакети або оновити існуючі. -
npm ci(clean install) призначений для CI/CD. Команда читає лишеpackage-lock.jsonі встановлює точні версії, що зберігаються в ньому. Якщоpackage-lock.jsonне збігається зpackage.json, команда завершує роботу з помилкою. Це гарантує, що середовище збігається між різними машинами і часом.
Ключові принципи/терміни
package-lock.json– файл, що фіксує точні версії залежностей.npm ci→ чиста інсталяція: видаляє папкуnode_modules, встановлює залежності з нуля.npm install→ інсталяція/оновлення: додає нові пакети, оновлюєpackage-lock.json.
Як це працює
- При
npm installnpm перевіряєpackage.json, шукає відповідні пакети в реєстрі, встановлює їх і оновлюєpackage-lock.json. - При
npm cinpm перевіряє, щоpackage-lock.jsonіснує і відповідаєpackage.json. Якщо так – видаляєnode_modulesі встановлює залежності згідно з блокомlockfileVersion.
Практика й реалізація
- У локальній розробці:
npm install(абоyarn add). - У CI‑пайплайнах:
npm ciпісля клонування репозиторію.
Тестування
- У Jest‑тестах можна перевірити, що
npm ciне змінюєpackage-lock.json: після запускуnpm ciфайл залишається незмінним.
Оптимізація запитів
npm ciшвидше, бо пропускає кроки перевірки та оновленняlockfile.
Безпека
- Використання
npm ciзменшує ризик непередбачуваних оновлень, що може викликати проблеми в продакшн‑середовищі.
Особливості у контексті DevOps
npm ciпідтримується в Docker‑build, GitHub Actions, GitLab CI тощо.
Часті помилки
npm ciзавершує роботу, якщоpackage-lock.jsonне синхронізований зpackage.json. Рішення: запуститиnpm installлокально, закомітити оновлений lockfile.- Якщо
node_modulesвже існує,npm ciвидаляє його; це може зайняти час у великих проектах.
Cheatsheet
npm install– розробка, додавання/оновлення.npm ci– CI/CD, стабільність, швидкість.