К практике
Начальныйnpmpipзависимости
📦Juniornpmpipзависимостиsemverpackage.json
Пакетные менеджеры и зависимости
npm, pip, semver, lock-файлы — как управлять чужим кодом в проекте.
Пакетные менеджеры — flow, semver, lock-файлы
Как npm install скачивает пакет:
npm install express
↓
📦 npmjs.com (Registry)
2+ миллиона пакетов
↓ скачивает express + зависимости
node_modules/
├── express
│ ├── body-parser
│ ├── qs
│ ├── path-to-regexp
└── ...
node_modules в .gitignore! — не коммить (сотни МБ). Вместо этого коммить package.json + lock-файл.
Язык примеров:
Шаг 1 из 3
1
Зачем пакетный менеджер
Жизнь без пакетного менеджера
Тебе нужна библиотека для парсинга дат:
- Найти сайт библиотеки
- Скачать архив
- Распаковать в проект
- Обновить — повторить всё с начала
- Зависимость этой библиотеки — ещё раз всё с начала...
Пакетный менеджер — это удобно
Одна команда:
bash
npm install dayjs # JavaScript
pip install requests # Python
cargo add serde # RustМенеджер скачивает пакет со всеми его зависимостями (transitive dependencies) из реестра.
Популярные реестры
javascript
npm (npmjs.com) ← JavaScript/Node.js (2M+ пакетов)
PyPI (pypi.org) ← Python
crates.io ← Rust
Maven Central ← Java
NuGet ← .NET/C#package.json / requirements.txt
Каждый проект описывает свои зависимости в файле:
json
{
"name": "my-app",
"dependencies": {
"express": "^4.18.0",
"dayjs": "^1.11.0"
},
"devDependencies": {
"jest": "^29.0.0"
}
}dependencies — нужны в продакшне.
devDependencies — только для разработки (тесты, линтер).
JavaScript
// package.json — манифест проекта
{
"name": "my-api",
"version": "1.0.0",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js",
"test": "jest"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.0.0"
},
"devDependencies": {
"jest": "^29.6.0",
"nodemon": "^3.0.0"
}
}
// Команды npm:
// npm install — установить все зависимости
// npm install express — добавить пакет
// npm install -D jest — добавить devDependency
// npm run dev — запустить скрипт "dev"