Менеджер пакетов npm
Зачем писать код с нуля, если кто-то уже написал его лучше вас? npm — это гигантский каталог готовых библиотек для JavaScript. Узнаем, как управлять зависимостями проекта и не изобретать велосипед каждый раз.
🌍 Что такое 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"
}
Название проекта и его версия. Версия в формате major.minor.patch (подробнее — в разделе о семантическом версионировании).
Пакеты, нужные для работы готового приложения. Устанавливаются командой npm install axios.
Пакеты только для разработки: тесты, сборщики, линтеры. Устанавливаются с флагом --save-dev.
Команды-сокращения для запуска через 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 в .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.
Несовместимые изменения API. Обновление может сломать ваш код. Например: 1.x.x → 2.0.0
Новые функции, обратно совместимые. Безопасно обновлять. Например: 1.2.x → 1.3.0
Исправления багов, обратно совместимые. Безопасно обновлять. Например: 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 существуют альтернативные менеджеры пакетов. Вы можете столкнуться с ними в разных проектах — важно понимать разницу.
Встроен в Node.js. Стандарт де-факто. Версия 7+ значительно ускорилась. Начинайте с него.
Создан Facebook (2016). Был быстрее npm в своё время. Yarn Berry (v2+) — совсем другая система. Популярен в React-проектах.
Самый быстрый из трёх. Экономит место на диске — общие пакеты хранятся один раз. Растёт в популярности.
✅ Совет новичку: начните с 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 вопросов