← Назад к вопросам

Что нужно использовать для установки того что есть в package-lock.json?

1.3 Junior🔥 181 комментариев
#Инструменты и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что нужно использовать для установки того что есть в 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 ciCI/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 — это ключевая команда для надёжных и воспроизводимых сборок.