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.
- Каждый пакет безопасен? Нет. Незнакомый пакет может запустить свою команду.