6. npm и управление пакетами

npm (Node Package Manager) — крупнейший реестр пакетов в мире. Более 2 миллионов пакетов.
package.json — сердце проекта
Заголовок раздела «package.json — сердце проекта»# Создание нового проектаnpm init # интерактивноnpm init -y # с дефолтными значениями{ "name": "my-api", "version": "1.0.0", "description": "REST API на Node.js", "main": "src/index.js", "type": "module", "scripts": { "start": "node src/index.js", "dev": "nodemon src/index.js", "test": "vitest", "lint": "eslint src/" }, "dependencies": { "express": "^4.18.2", "dotenv": "^16.0.3" }, "devDependencies": { "nodemon": "^3.0.0", "vitest": "^1.0.0" }, "engines": { "node": ">=18.0.0" }}Основные команды npm
Заголовок раздела «Основные команды npm»# Установка всех зависимостей из package.jsonnpm install # или npm i
# Установка конкретного пакетаnpm install expressnpm install express@latest # последняя версия
# Dev зависимости (только для разработки)npm install --save-dev nodemonnpm install -D nodemon # сокращение
# Глобальная установка (для CLI инструментов)npm install -g nodemonnpm install -g typescript
# Удаление пакетаnpm uninstall expressnpm uninstall -g nodemon
# Обновление пакетовnpm update # все пакетыnpm update express # конкретный пакетnpm outdated # список устаревших
# Аудит безопасностиnpm auditnpm audit fix # автоисправление
# Просмотр информации о пакетеnpm info expressnpm list # список установленныхnpm list --depth=0 # только топ-уровеньВерсионирование (SemVer)
Заголовок раздела «Версионирование (SemVer)»1.2.3│ │ └── Patch — исправления багов│ └──── Minor — новый функционал (обратно совместимый)└────── Major — breaking changes
В package.json:"express": "4.18.2" — точная версия"express": "^4.18.2" — 4.x.x (minor и patch обновления)"express": "~4.18.2" — 4.18.x (только patch обновления)"express": "*" — любая (опасно!)"express": ">=4.0.0" — 4.0.0 и вышеpackage-lock.json
Заголовок раздела «package-lock.json»# package-lock.json — фиксирует ТОЧНЫЕ версии всех зависимостей# Всегда коммить в git!
# Если package-lock.json есть — npm ci быстрее и надёжнееnpm ci # точно воспроизводит lock файл (для CI/CD)npm i # может обновлять в рамках semverПопулярные пакеты
Заголовок раздела «Популярные пакеты»# HTTP фреймворкиnpm install express # самый популярныйnpm install fastify # быстрее Expressnpm install koa # минималистичныйnpm install hono # edge-ready, современный
# База данныхnpm install prisma # ORM (PostgreSQL, MySQL, SQLite)npm install mongoose # MongoDB ODMnpm install pg # PostgreSQLnpm install better-sqlite3 # SQLite
# Утилитыnpm install dotenv # переменные окруженияnpm install axios # HTTP запросыnpm install lodash # утилиты для данныхnpm install date-fns # работа с датамиnpm install uuid # генерация UUIDnpm install zod # валидация данных
# Аутентификацияnpm install jsonwebtoken # JWTnpm install bcryptjs # хэширование паролейnpm install passport # стратегии аутентификации
# Разработкаnpm install -D nodemon # перезапуск при измененияхnpm install -D typescript # TypeScriptnpm install -D eslint # линтерnpm install -D prettier # форматирование кодаnpm scripts — автоматизация
Заголовок раздела «npm scripts — автоматизация»{ "scripts": { "start": "node src/index.js", "dev": "nodemon src/index.js --watch src", "build": "tsc -p tsconfig.json", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage", "lint": "eslint src/ --ext .js,.ts", "lint:fix": "eslint src/ --ext .js,.ts --fix", "format": "prettier --write src/", "db:migrate": "prisma migrate dev", "db:seed": "node prisma/seed.js", "docker:up": "docker-compose up -d", "docker:down": "docker-compose down" }}npm run dev # запуск devnpm run test # тестыnpm run lint:fix # исправить lint ошибки
# pre и post хукиnpm run prebuild # выполнится до buildnpm run buildnpm run postbuild # выполнится после build.npmrc — настройка npm
Заголовок раздела «.npmrc — настройка npm»# .npmrc в корне проектаregistry=https://registry.npmjs.org/save-exact=true # фиксировать точные версииengine-strict=true # ошибка если не подходит engines
# Для приватных пакетов@mycompany:registry=https://npm.mycompany.com/npx — запуск без установки
Заголовок раздела «npx — запуск без установки»# Запустить package без глобальной установкиnpx create-react-app my-appnpx prisma initnpx eslint --initnpx nodemon server.js
# Запустить конкретную версиюnpx node@18 -e "console.log(process.version)"Альтернативы npm
Заголовок раздела «Альтернативы npm»# pnpm — быстрее, экономит место (hard links)npm install -g pnpmpnpm installpnpm add express
# yarn — популярная альтернатива от Facebooknpm install -g yarnyarn installyarn add express
# bun — всё-в-одном: runtime + package manager# bun install (намного быстрее npm)bun add expressПубликация своего пакета
Заголовок раздела «Публикация своего пакета»# Регистрация на npmjs.com, затем:npm loginnpm publish # публичный пакетnpm publish --access=public # для scoped (@name/pkg)
# Обновление версииnpm version patch # 1.0.0 → 1.0.1npm version minor # 1.0.0 → 1.1.0npm version major # 1.0.0 → 2.0.0npm publishПрактика
Заголовок раздела «Практика»- Создай новый проект
npm init -y, добавь скриптыstart,dev,test - Установи
express,dotenvкак зависимости;nodemonкак dev-зависимость - Настрой
nodemonдля автоперезапуска при изменении файлов вsrc/ - Запусти
npm audit— изучи отчёт о безопасности - Попробуй
npxдля запуска команды без глобальной установки