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

Основы npm

package.json, установка пакетов, версионирование

Цель урока

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

  • Понимать структуру package.json
  • Устанавливать и удалять пакеты
  • Работать с версиями

package.json

Главный файл конфигурации Node.js проекта.

Создание

# Интерактивное создание
npm init

# Быстрое создание с настройками по умолчанию
npm init -y

Структура

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "Описание проекта",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  },
  "keywords": ["node", "api"],
  "author": "Имя <email@example.com>",
  "license": "MIT",
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "jest": "^29.7.0"
  }
}

Основные поля

ПолеОписание
nameИмя пакета (lowercase, без пробелов)
versionВерсия в формате semver
mainТочка входа
scriptsКоманды npm
dependenciesЗависимости для production
devDependenciesЗависимости для разработки

Установка пакетов

Локальная установка

# Установка в dependencies
npm install express
npm i express  # сокращение

# Установка в devDependencies
npm install jest --save-dev
npm i jest -D  # сокращение

# Установка конкретной версии
npm install express@4.17.1

# Установка из package.json
npm install
npm i

Глобальная установка

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

# Проверка глобальных пакетов
npm list -g --depth=0

# Удаление глобального пакета
npm uninstall -g nodemon

Удаление пакетов

# Удаление из dependencies
npm uninstall express
npm remove express  # альтернатива

# Удаление из devDependencies
npm uninstall jest --save-dev

Версионирование (SemVer)

Формат: MAJOR.MINOR.PATCH

ЧастьКогда увеличивается
MAJORНесовместимые изменения API
MINORНовая функциональность (обратно совместимая)
PATCHИсправления багов

Диапазоны версий

{
  "dependencies": {
    "exact": "4.18.2",           // Точная версия
    "caret": "^4.18.2",          // 4.x.x (MINOR и PATCH)
    "tilde": "~4.18.2",          // 4.18.x (только PATCH)
    "greater": ">4.0.0",         // Больше 4.0.0
    "range": ">=4.0.0 <5.0.0",   // Диапазон
    "any": "*",                  // Любая версия
    "latest": "latest"           // Последняя версия
  }
}

Рекомендация

Используй ^ (caret) — это баланс между стабильностью и обновлениями.


package-lock.json

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

{
  "name": "my-project",
  "lockfileVersion": 3,
  "packages": {
    "node_modules/express": {
      "version": "4.18.2",
      "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
      "integrity": "sha512-..."
    }
  }
}

Важно:

  • Всегда коммить package-lock.json в Git
  • Используй npm ci для точной установки из lock-файла
# Установка точно по lock-файлу (для CI/CD)
npm ci

Полезные команды

# Информация о пакете
npm info express

# Поиск пакетов
npm search express

# Проверка устаревших пакетов
npm outdated

# Обновление пакетов
npm update

# Обновление до последних версий
npm update express@latest

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

# Исправление уязвимостей
npm audit fix

# Список установленных пакетов
npm list
npm list --depth=0  # только top-level

Практика

Задание 1: Создание проекта

Задача: Создай проект и установи express.

Решение:

mkdir my-api
cd my-api
npm init -y
npm install express

Задание 2: Анализ версий

Задача: Какие версии подходят под ^2.5.3?

Ответ: 2.5.3, 2.5.4, 2.6.0, 2.9.9 (любая 2.x.x >= 2.5.3)


Проверь себя

  1. Чем dependencies отличается от devDependencies?
  2. Что означает ^ в версии?
  3. Зачем нужен package-lock.json?