Що таке package.json і як працює npm?
package.json та npm
npm (Node Package Manager) є стандартним менеджером пакетів для Node.js. package.json — це файл маніфесту кожного проекту Node.js, який описує його залежності, скрипти, метадані та конфігурацію.
Структура package.json
json
{
"name": "my-app",
"version": "1.0.0",
"description": "Мій чудовий додаток Node.js",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"dev": "nodemon src/index.js",
"test": "jest",
"build": "tsc"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.0.0"
},
"devDependencies": {
"nodemon": "^3.0.0",
"jest": "^29.0.0",
"typescript": "^5.0.0"
},
"engines": {
"node": ">=18.0.0"
}
}Основні поля
| Поле | Опис |
|---|---|
name | Назва пакету (повинна бути унікальною в npm) |
version | SemVer: major.minor.patch |
main | Точка входу для пакету |
scripts | CLI скорочення, які виконуються з npm run |
dependencies | Пакети, необхідні в продакшені |
devDependencies | Пакети, необхідні тільки для розробки |
peerDependencies | Пакети, які споживач повинен надати |
engines | Необхідні версії Node.js/npm |
Діапазони версій (SemVer)
json
"express": "4.18.2" // точна версія
"express": "^4.18.2" // сумісна: >=4.18.2 <5.0.0
"express": "~4.18.2" // тільки патч: >=4.18.2 <4.19.0
"express": "*" // будь-яка версія (небезпечна!)
"express": ">=4.0.0" // діапазонpackage-lock.json
package-lock.json фіксує точні версії всіх встановлених пакетів (включаючи транзитивні залежності). Завжди комітте його!
package.json → вказує діапазони версій
package-lock.json → фіксує точні вирішені версії
node_modules/ → встановлені пакети (ніколи не комітте це)Загальні команди npm
bash
# Встановити всі залежності
npm install
# Встановити пакет
npm install express
npm install --save-dev jest # dev залежність
npm install -g nodemon # глобально
# Видалити пакет
npm uninstall express
# Запустити скрипт
npm run dev
npm test # скорочення для npm run test
npm start # скорочення для npm run start
# Оновити пакети
npm update
npm outdated # переглянути застарілі пакети
# Аудит безпеки
npm audit
npm audit fix
# Переглянути інформацію про пакет
npm info express
npm list # дерево встановлених пакетівnpm Скрипти
json
{
"scripts": {
"start": "node dist/index.js",
"dev": "nodemon src/index.ts",
"build": "tsc",
"test": "jest --coverage",
"lint": "eslint src/**/*.ts",
"prestart": "npm run build", // виконується перед "start"
"posttest": "echo 'Тести завершено'" // виконується після "test"
}
}Хуки pre та post виконуються автоматично перед/після скриптів.
.npmrc
ini
# .npmrc — конфігурація npm
registry=https://registry.npmjs.org/
save-exact=true # зберігати точні версії
engine-strict=true # забезпечити поле enginesnpm vs yarn vs pnpm
| npm | yarn | pnpm | |
|---|---|---|---|
| Швидкість | Добра | Швидка | Найшвидша |
| Використання диска | Високе | Високе | Низьке (жорсткі посилання) |
| Lockfile | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Робочі простори | ✅ | ✅ | ✅ |
Підсумок
package.json є дескриптором проекту для додатків Node.js. npm керує вашими залежностями, скриптами та версіями. Завжди комітте package-lock.json і додайте node_modules/ до .gitignore.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.