$ sudo teach IT
МОДУЛЬ 12 · УРОК 2

Менеджер пакетов npm

Зачем писать код с нуля, если кто-то уже написал его лучше вас? npm — это гигантский каталог готовых библиотек для JavaScript. Узнаем, как управлять зависимостями проекта и не изобретать велосипед каждый раз.

⏱ ~20 минут 🎓 Для новичков 📦 Node.js + npm

🌍 Что такое npm и зачем он нужен?

Представьте, что вам нужно построить дом. Можно пилить доски вручную, лепить кирпичи из глины и варить сталь для гвоздей. А можно купить готовые стройматериалы в магазине и потратить силы на само строение. npm — это такой магазин для программистов.

npm расшифровывается как Node Package Manager — менеджер пакетов для Node.js. Сегодня это крупнейший реестр программного обеспечения в мире: более двух миллионов пакетов и миллиарды загрузок в неделю. Хотите работать с датами — вот date-fns. Нужны HTTP-запросы — вот axios. Сложные утилиты для массивов — вот lodash.

📦 Пакет — это чужой код, упакованный так, чтобы его можно было легко добавить в ваш проект. Он может содержать одну функцию или целый фреймворк. npm управляет скачиванием, версиями и зависимостями пакетов.

npm устанавливается вместе с Node.js. Если у вас уже установлен Node.js — npm тоже есть. Проверить версию можно в терминале:

node --version   # v20.11.0 (или любая другая версия)
npm --version    # 10.2.4 (или любая другая версия)

📋 package.json — паспорт проекта

Каждый JavaScript-проект, использующий npm, имеет файл package.json. Это JSON-файл, который хранит всю мета-информацию о проекте: название, версию, автора, список зависимостей и команды для запуска.

Чтобы создать package.json, запустите команду в папке вашего проекта:

npm init          # Интерактивный режим — задаёт вопросы
npm init -y       # Создать с настройками по умолчанию (быстро)

Результат — файл package.json примерно такого содержания:

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "Мой первый проект с npm",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "node index.js",
    "build": "webpack --mode production",
    "test": "jest"
  },
  "dependencies": {
    "axios": "^1.6.0",
    "date-fns": "^3.0.0"
  },
  "devDependencies": {
    "webpack": "^5.89.0",
    "jest": "^29.7.0"
  },
  "author": "Иван Иванов",
  "license": "MIT"
}
name / version

Название проекта и его версия. Версия в формате major.minor.patch (подробнее — в разделе о семантическом версионировании).

dependencies

Пакеты, нужные для работы готового приложения. Устанавливаются командой npm install axios.

devDependencies

Пакеты только для разработки: тесты, сборщики, линтеры. Устанавливаются с флагом --save-dev.

scripts

Команды-сокращения для запуска через npm run <имя>. Стандартные: start, build, test.

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

Основные команды, которые вы будете использовать каждый день:

# Установить все зависимости из package.json (например, после git clone)
npm install

# Установить конкретный пакет и добавить в dependencies
npm install axios
npm install date-fns lodash    # можно несколько сразу

# Установить пакет только для разработки (devDependencies)
npm install --save-dev webpack
npm install -D jest            # -D — сокращение от --save-dev

# Установить пакет глобально (доступен в любом проекте)
npm install -g nodemon

# Удалить пакет
npm uninstall axios

После установки пакета в вашей папке появится:

📁
node_modules/

Папка с кодом всех установленных пакетов. Может весить сотни мегабайт. Никогда не трогайте её руками.

🔒
package-lock.json

Точные версии всех установленных пакетов (включая зависимости зависимостей). Фиксирует воспроизводимую сборку.

🚫 Всегда добавляйте node_modules в .gitignore! Эту папку никогда не коммитят в Git — она огромная и может быть восстановлена командой npm install. В файле .gitignore добавьте строку: node_modules/

▶️ npm scripts — команды проекта

Раздел scripts в package.json — это мощный инструмент. Здесь вы определяете команды, которые можно запустить через npm run. Это удобно: вместо того чтобы помнить длинную команду с кучей флагов, вы просто пишете npm run build.

{
  "scripts": {
    "start": "node index.js",
    "dev": "node --watch index.js",
    "build": "webpack --mode production --config webpack.config.js",
    "test": "jest --coverage",
    "lint": "eslint src/**/*.js",
    "format": "prettier --write src/"
  }
}
# Запустить скрипты:
npm start           # npm run start можно сократить до npm start
npm run dev
npm run build
npm test            # npm run test можно сократить до npm test
npm run lint

💡 Интересный факт: в scripts можно использовать пакеты из node_modules напрямую, без глобальной установки. Npm автоматически добавляет путь к node_modules/.bin в переменную PATH при запуске скрипта.

⭐ Популярные пакеты — с чего начать

Вот несколько пакетов, с которыми вы точно столкнётесь в реальной разработке:

axios — HTTP-запросы

Удобная библиотека для работы с HTTP-запросами. Чище и удобнее встроенного fetch.

import axios from 'axios';

const response = await axios.get('https://api.example.com/users');
console.log(response.data); // Уже разобранный JSON

date-fns — работа с датами

Удобные утилиты для работы с датами. Модульная — берёте только то, что нужно.

import { format, addDays, differenceInDays } from 'date-fns';
import { ru } from 'date-fns/locale';

const today = new Date();
console.log(format(today, 'dd MMMM yyyy', { locale: ru })); // 24 июня 2026
console.log(addDays(today, 7)); // дата через 7 дней

lodash — утилиты для данных

Коллекция утилит для работы с массивами, объектами, строками. «Швейцарский нож» JavaScript-разработчика.

import _ from 'lodash';

const users = [
  { name: 'Алиса', age: 25 },
  { name: 'Боб', age: 30 },
  { name: 'Алиса', age: 22 }
];

const grouped = _.groupBy(users, 'name');
// { 'Алиса': [{...}, {...}], 'Боб': [{...}] }

const sorted = _.sortBy(users, 'age');
const unique = _.uniqBy(users, 'name');

🔢 Семантическое версионирование (SemVer)

Версии пакетов в npm следуют стандарту SemVer (Semantic Versioning): три числа через точку — MAJOR.MINOR.PATCH.

MAJOR

Несовместимые изменения API. Обновление может сломать ваш код. Например: 1.x.x → 2.0.0

MINOR

Новые функции, обратно совместимые. Безопасно обновлять. Например: 1.2.x → 1.3.0

PATCH

Исправления багов, обратно совместимые. Безопасно обновлять. Например: 1.2.3 → 1.2.4

В package.json символы перед версией имеют значение:

{
  "dependencies": {
    "axios": "^1.6.0",    // ^ — принимать MINOR и PATCH обновления (1.x.x)
    "lodash": "~4.17.21", // ~ — принимать только PATCH обновления (4.17.x)
    "date-fns": "3.0.0"   // без символа — строго эта версия
  }
}

⚖️ npm vs yarn vs pnpm

Кроме npm существуют альтернативные менеджеры пакетов. Вы можете столкнуться с ними в разных проектах — важно понимать разницу.

npm

Встроен в Node.js. Стандарт де-факто. Версия 7+ значительно ускорилась. Начинайте с него.

yarn

Создан Facebook (2016). Был быстрее npm в своё время. Yarn Berry (v2+) — совсем другая система. Популярен в React-проектах.

pnpm

Самый быстрый из трёх. Экономит место на диске — общие пакеты хранятся один раз. Растёт в популярности.

✅ Совет новичку: начните с npm — он всегда под рукой, хорошо задокументирован, и команды такие же интуитивные, как у остальных. Перейти на pnpm или yarn всегда можно позже.

✅ Итоги урока

  • npm — крупнейший реестр пакетов для JavaScript, устанавливается вместе с Node.js
  • package.json — манифест проекта: название, версия, зависимости, скрипты
  • npm init -y создаёт package.json, npm install axios устанавливает пакет
  • dependencies — для работы; devDependencies (флаг -D) — только для разработки
  • node_modules/ нельзя коммитить в Git — добавьте в .gitignore
  • Скрипты в scripts запускаются через npm run имя или npm start / npm test
  • Версионирование: MAJOR.MINOR.PATCH — ^ разрешает minor/patch, ~ только patch
  • Альтернативы: yarn и pnpm — быстрее, но npm подходит для начала

Следующий урок — Node.js: как JavaScript работает вне браузера и как создать простой HTTP-сервер. 🚀

Тест: npm и управление пакетами

6 вопросов

Создание package.json

Напишите команду, которая создаёт файл package.json с настройками по умолчанию (без интерактивных вопросов). И команду для установки пакета axios как зависимости проекта.

Семантическое версионирование

Расшифруйте версию 3.4.1 по схеме SemVer: что означает каждая из трёх цифр (MAJOR, MINOR, PATCH)?