Что такое npm?

Ответ

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. А то представь, какого хуя будет, если каждый начнёт пушить эту хитрую жопу в репозиторий.