Ответ
npm (Node Package Manager) — это стандартный менеджер пакетов для экосистемы Node.js. Он используется для установки, управления зависимостями и публикации JavaScript-библиотек (пакетов).
Ключевые функции:
- Управление зависимостями: Установка пакетов через
npm install <package-name>. Зависимости и их версии фиксируются в файлеpackage.json. - Скриптинг: Запуск пользовательских команд, определённых в секции
scriptsфайлаpackage.json(например,npm run start,npm test). - Публикация пакетов: Позволяет разработчикам публиковать свои библиотеки в публичный или приватный реестр npm.
- Управление версиями: Поддерживает семантическое версионирование (SemVer) через символы
^,~вpackage.json.
Пример package.json:
{
"name": "my-app",
"version": "1.0.0",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"jest": "^29.0.0"
}
}
Основные команды:
npm init— инициализирует новый проект и создаётpackage.json.npm install— устанавливает все зависимости изpackage.json.npm install <package-name> --save— устанавливает пакет и добавляет его вdependencies.npm install <package-name> --save-dev— устанавливает пакет и добавляет его вdevDependencies(для инструментов разработки, например, тестовых фреймворков).npm run <script-name>— выполняет пользовательский скрипт.
Ответ 18+ 🔞
А, npm, ёпта! Ну это же классика, ядрёна вошь! Представь себе такую картину: ты пишешь на Node.js, и тебе вдруг понадобилась какая-нибудь библиотека, чтобы не изобретать велосипед. Вот тут-то наш герой и вступает в игру.
По сути, это такой центральный склад, где лежат овердохуища пакетов — от мелких утилит до целых фреймворков. Всё, что нужно, — это покричать в терминал npm install express, и тебе притащат этот самый express прямо в папку node_modules. А потом ты смотришь на неё и сам от себя охуеваешь, потому что она раздувается до неприличных размеров, ведь каждый пакет тянет за собой свои зависимости, а те — свои. Волнение ебать!
Главный файл, вокруг которого всё вертится, — это package.json. Он как паспорт твоего проекта. В нём прописано, как проект зовут, какая у него версия и — самое главное — что он хавает. Всё это делится на два типа:
- dependencies — это то, без чего проект на проде просто накроется медным тазом. Например, тот же
express. - devDependencies — это инструменты для разработки, вроде тестовых фреймворков (
jest). На продакшене они не нужны, это как тренировочные колёса.
Вот смотри, как это выглядит. Сам код не трогаю, как велено:
{
"name": "my-app",
"version": "1.0.0",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"jest": "^29.0.0"
}
}
Видишь эти циркумы (^) перед версиями? Это магия семантического версионирования. Грубо говоря, ^4.18.2 означает «дай мне самую свежую версию, но только не ломающую обратную совместимость, начинай поиск с 4.18.2». Иногда это работает, а иногда обновляется какой-нибудь пидарас шерстяной из глубоких зависимостей, и всё взъёбывается. Доверия ебать ноль, поэтому в серьёзных проектах часто фиксируют версии намертво.
А ещё там есть секция scripts. Это просто песня! Вместо того чтобы каждый раз писать в консоль длинную команду, ты пишешь в package.json что-то вроде "start": "node server.js". И потом просто орёшь npm run start. Хочешь запустить сервер для разработки с автоперезагрузкой? npm run dev. Удобно же, ебушки-воробушки!
Основные команды, которые надо знать, чтобы не выглядеть полным чайником:
npm init— создаёт новыйpackage.json. Тебе зададут кучу вопросов, но если терпения ноль ебать, можно тыкнутьnpm init -y, и он всё сделает сам, со значениями по умолчанию.npm install— священный ритуал. Скачивает ВСЕ зависимости, которые прописаны вpackage.json, в ту самую легендарную папкуnode_modules. Если её удалить, следующий запуск этой команды будет долгим, как день в очереди в ЖЭКе.npm install <package-name> --save— ставит пакет и записывает его вdependencies.--saveсейчас можно не писать, это поведение по умолчанию.npm install <package-name> --save-dev— ставит пакет, но записывает его вdevDependencies. Для всяких вспомогательных штук.npm run <script-name>— выполняет твой кастомный скрипт изpackage.json.
Вот и вся магия. Главное — помнить, что node_modules весит пиздец сколько, и её всегда добавляют в .gitignore. А то представь, какого хуя будет, если каждый начнёт пушить эту хитрую жопу в репозиторий.