Программирование

npm

Что такое npm?

npm значит Node Package Manager. Isaac Schlueter открыл его в 2010 году вместе с Node.js. Пакет — готовый код, который написал кто-то другой. package.json хранит имя проекта и список пакетов. npm install читает этот список и кладёт пакеты в папку node_modules. package-lock.json закрепляет точную версию, чтобы завтра на другой машине пришёл тот же код. Yarn и pnpm делают похожую работу, но это не сам npm.

Для чего нужен npm?

npm нужен, чтобы добавить библиотеку в проект, запустить скрипт одной командой и отдать пакет другому.

  • Поставить React и другую библиотеку
  • Открыть тест через npm test
  • Собрать проект на другом компьютере теми же пакетами
  • Отправить свой пакет в реестр

Что можно делать с npm?

Через npm добавляют пакет, удаляют старый и запускают скрипт из package.json. Сам он страницу не рисует и сервер не собирает. Код внутри пакета выполняется в твоём проекте. Установка незнакомого пакета может запустить и его команду.

Сложно ли освоить npm?

Поставить один пакет легко. Трудность в версии и в праве. Пакет приносит и другой пакет. Если один устарел, выходит предупреждение, но проект ещё может работать. Если выбросить файл package-lock, завтра может прийти другая версия. Ключ реестра в репозиторий не кладут.

Плюсы и ограничения

Плюс: библиотеку не переписывают, список лежит в одном файле, та же установка повторяется на другой машине. Ограничение: node_modules растёт. Не каждой мелкой работе нужен пакет. npm — это не сам Node.js.

Основные понятия

У пакета есть имя и версия. package.json — список. node_modules — место скачанных файлов.

  • dependencies нужны, чтобы проект работал
  • devDependencies только для подготовки
  • scripts связывают команду с коротким именем
  • Файл lock хранит версию

Короткий пример

Эта строка добавляет пакет React в список проекта и скачивает файлы. Сам React она не пишет.

npm install react

Частые вопросы

  • npm и Node.js — одно и то же? Нет. Node.js запускает программу. npm приносит пакет.
  • package.json — это сам пакет? Нет. Это список. Файл пакета лежит в node_modules.
  • Каждый пакет безопасен? Нет. Незнакомый пакет может запустить свою команду.