Что нужно использовать для установки того что есть в package-lock.json?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что нужно использовать для установки того что есть в package-lock.json?
Используй npm ci (clean install) для установки зависимостей точно в соответствии с package-lock.json. Это команда специально разработана для CI/CD, разработки и совместной работы команды, чтобы гарантировать идентичные версии пакетов.
Различия: npm install vs npm ci
npm install (устанавливает/обновляет):
npm install
- Читает package.json
- Может обновить версии пакетов
- Может изменить package-lock.json
- Может привести к разным версиям на разных машинах
- Используй для локальной разработки
Пример:
{
"dependencies": {
"react": "^18.0.0"
}
}
При npm install может установиться React 18.2.0, а у коллеги 18.1.0.
npm ci (чистая установка по lock файлу):
npm ci
- Читает package-lock.json
- Точно устанавливает версии из lock файла
- Не изменяет package-lock.json
- Гарантирует идентичные версии везде
- Используй в CI/CD, Docker, и совместной работе
Почему это важно
// package-lock.json фиксирует ВСЕ версии
{
"dependencies": {
"react": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"integrity": "sha512-..."
}
}
}
npm ci гарантирует, что все разработчики и CI/CD используют точно 18.2.0, не 18.1.0 или 18.3.0.
Практические сценарии
Локальная разработка:
npm install
# или просто
npm i
Можно обновить версии, если нужно экспериментировать.
Docker контейнер (production):
FROM node:18
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --only=production
COPY . .
CMD ["npm", "start"]
npm ci гарантирует, что тот же код, который работает на твоей машине, будет работать в контейнере.
GitHub Actions (CI/CD):
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm test
Совместная разработка:
# Разработчик 1
npm install
# Работает, добавляет новую зависимость
npm install react-query
# обновляет package-lock.json
git push
# Разработчик 2
git pull
npm ci # Получает точные версии, включая новую зависимость
Частые ошибки
Ошибка 1: npm install в CI/CD
# НЕПРАВИЛЬНО
- run: npm install
Ошибка 2: Коммитить изменённый package-lock.json без причины
npm install # может случайно изменить lock
git diff package-lock.json # Много изменений!
git commit -am "deps"
Связанные команды
# Установить production зависимости (без dev)
npm ci --only=production
npm ci --production
# Установить и dev, и production
npm ci
# Полная переустановка
rm -rf node_modules
npm ci
# Или одной командой (npm 7+)
npm ci --force
Проверка целостности
npm ci также проверяет целостность пакетов через хеши в package-lock.json:
{
"react": {
"version": "18.2.0",
"integrity": "sha512-wS+hAgJShR0KhR5M5+8QCel...",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
}
}
Если пакет повреждён или изменён, npm ci откажется его устанавливать.
Best practices
1. Всегда коммитить package-lock.json:
git add package.json package-lock.json
git commit -m "add dependency"
2. Использовать npm ci в конвейерах:
- run: npm ci
3. Периодически обновлять зависимости (но осознанно):
npm install
npm test
git add package-lock.json
git commit -m "update dependencies"
4. Не редактировать package-lock.json вручную:
# ПРАВИЛЬНО
npm install some-package
npm rm some-package
# НЕПРАВИЛЬНО - не редактируй lock файл!
Сравнение команд
| Команда | Когда использовать | Изменяет lock? |
|---|---|---|
| npm install | Локальная разработка | Может |
| npm ci | CI/CD, Docker, совместная работа | Никогда |
| npm install --save | Добавить новую зависимость | Да |
| npm ci --frozen-lockfile | Убедиться, что lock не изменится | Никогда |
Ключевые выводы
- npm ci для lock файла — точная установка по package-lock.json
- npm install для разработки — может обновить версии
- Всегда коммитить lock файл — синхронизирует версии в команде
- CI/CD должен использовать npm ci — гарантирует воспроизводимость
- lock файл — source of truth — не редактировать вручную
npm ci — это ключевая команда для надёжных и воспроизводимых сборок.