JS Tower
Node.jsМодуль 2: Экосистема npm

Работа с зависимостями

dependencies, devDependencies, lock-файлы

Цель урока

В этом уроке ты научишься:

  • Различать типы зависимостей
  • Работать с lock-файлами
  • Обновлять зависимости безопасно

Типы зависимостей

dependencies

Пакеты, необходимые для работы приложения в production.

npm install express
{
  "dependencies": {
    "express": "^4.18.2",
    "mongoose": "^8.0.0"
  }
}

devDependencies

Пакеты для разработки и тестирования.

npm install jest --save-dev
npm install typescript -D
{
  "devDependencies": {
    "jest": "^29.7.0",
    "typescript": "^5.3.0",
    "eslint": "^8.55.0"
  }
}

peerDependencies

Зависимости, которые должен установить пользователь пакета.

{
  "peerDependencies": {
    "react": ">=16.8.0"
  }
}

optionalDependencies

Необязательные зависимости.

{
  "optionalDependencies": {
    "fsevents": "^2.3.0"
  }
}

Сравнение

ТипУстановкаКогда использовать
dependenciesnpm iRuntime зависимости
devDependenciesnpm i -DТесты, сборка, линтеры
peerDependenciesПользовательПлагины, библиотеки
optionalDependenciesnpm iПлатформо-зависимые

Lock-файлы

package-lock.json

Фиксирует точные версии всех зависимостей.

# Установка точно по lock-файлу
npm ci

# Обычная установка (может обновить lock)
npm install

Важно

Всегда коммить package-lock.json в Git. Это гарантирует одинаковые версии у всех разработчиков.

npm ci vs npm install

КомандаПоведение
npm installОбновляет lock-файл при необходимости
npm ciСтрого следует lock-файлу, удаляет node_modules
# Для CI/CD всегда используй npm ci
npm ci

Обновление зависимостей

Проверка устаревших

npm outdated

Вывод:

Package    Current  Wanted  Latest  Location
express    4.17.1   4.18.2  4.18.2  my-project
lodash     4.17.20  4.17.21 4.17.21 my-project

Обновление

# Обновить в пределах semver
npm update

# Обновить конкретный пакет
npm update express

# Обновить до последней версии
npm install express@latest

npm-check-updates

# Установка глобально
npm install -g npm-check-updates

# Проверка обновлений
ncu

# Обновление package.json
ncu -u

# Установка обновлений
npm install

Безопасность

Аудит

# Проверка уязвимостей
npm audit

# Автоматическое исправление
npm audit fix

# Принудительное исправление (может сломать)
npm audit fix --force

Snyk

npm install -g snyk
snyk test
snyk monitor

Практика

Задание 1: Типы зависимостей

Задача: Установи express в dependencies и jest в devDependencies.

Решение:

npm install express
npm install jest --save-dev

Задание 2: Обновление

Задача: Найди устаревшие пакеты и обнови их.

Решение:

npm outdated
npm update

Проверь себя

  1. Когда использовать devDependencies?
  2. Чем npm ci отличается от npm install?
  3. Как проверить уязвимости?