Node.js
Установка пакетов, package.json и node_modules
Короткий ответ: npm install устанавливает зависимости Node.js-проекта. Если вы указываете имя пакета, npm скачивает этот пакет и записывает его в package.json. Если запускаете npm install без имени пакета, npm читает уже существующий package.json и восстанавливает все зависимости проекта
Этот материал закрывает запросы «npm install», «как скачать npm через консоль», «как установить модуль node js», «npm установить», «установка npm windows» и похожие хвосты. Важно не путать две вещи: npm как инструмент обычно ставится вместе с Node.js, а npm install — это команда, которая ставит пакеты внутрь конкретного проекта
Что такое npm в проекте
npm — это менеджер пакетов для Node.js. Пакет — это чужой или ваш модуль, который можно подключить к проекту: библиотека для сервера, работы с датами, отправки запросов, чтения файлов, тестирования или сборки
Когда вы пишете проект без пакетов, у вас может быть один файл index.js. Когда проект растет, вы почти неизбежно устанавливаете зависимости, и npm помогает не скачивать каждую библиотеку руками
Подготовьте папку
Создайте новую папку и инициализируйте проект
mkdir npm-install-demo
cd npm-install-demo
npm init -y
Команда npm init -y создает package.json. Это не код программы, а описание проекта. В нем npm хранит имя, версию, команды запуска и список зависимостей
Установите первый пакет
Поставим пакет slugify, который превращает текст в удобную строку для адресов
npm install slugify
После установки в проекте появятся или изменятся три важные вещи
package.json— здесь появится зависимостьslugifypackage-lock.json— здесь npm зафиксирует точные версии пакетовnode_modules— сюда npm скачает код установленных пакетов
Фрагмент package.json будет выглядеть примерно так
{
"dependencies": {
"slugify": "^1.6.6"
}
}
Версия может отличаться, и это нормально. Главное, что зависимость появилась в списке
Используйте пакет в коде
Создайте файл index.js
const slugify = require("slugify");
const title = "Как работает npm install";
const slug = slugify(title, {
lower: true,
strict: true
});
console.log(slug);
Запустите файл
node index.js
Ожидаемый вывод
kak-rabotaet-npm-install
Теперь видно, зачем вообще нужна установка пакета: мы подключили готовую функцию и использовали ее в своем коде
Что делает npm install без имени пакета
Если вы скачали чужой проект с GitHub или перенесли проект на другой компьютер, папки node_modules обычно нет. Ее не хранят в репозитории, потому что она может быть огромной
В такой ситуации достаточно открыть папку проекта и выполнить
npm install
npm прочитает package.json и package-lock.json, скачает зависимости и восстановит node_modules. Поэтому в большинстве инструкций по запуску Node.js-проектов сначала идет npm install, а потом npm start
Когда использовать npm install с флагами
Для обычной зависимости используйте
npm install express
Для зависимости, которая нужна только во время разработки, например тестовый инструмент, используйте
npm install eslint --save-dev
В современных версиях npm обычная запись зависимости происходит автоматически. Старые инструкции с --save чаще всего уже не нужны, хотя сама команда может работать
Чем npm install отличается от npm start
npm install устанавливает зависимости. npm start запускает команду из раздела scripts в package.json. Это две разные операции, но новички часто смешивают их из-за одинакового слова npm
Пример package.json
{
"scripts": {
"start": "node index.js"
}
}
После этого команда
npm start
запустит node index.js
Мини-практика
Создайте новый проект, установите slugify, напишите файл index.js и получите slug для любой русской или английской фразы. Затем удалите папку node_modules, выполните npm install без имени пакета и снова запустите node index.js
Так вы увидите два сценария: установка нового пакета и восстановление зависимостей уже существующего проекта
Частые ошибки
npm не найден Проверьте node -v и npm -v. Если npm не установлен, установите Node.js заново с официального сайта или через менеджер версий
Команда запускается не в той папке Если рядом нет package.json, npm не понимает, какие зависимости относятся к проекту. Откройте терминал в корне проекта
node_modules случайно добавили в архив или репозиторий Обычно эту папку не переносят руками. Хранят package.json и package-lock.json, а зависимости восстанавливают через npm install
После установки пакет не подключается Проверьте имя пакета и способ подключения. Одни пакеты работают через require(), другие через import, а некоторые требуют настройки "type": "module" в package.json
Что почитать дальше по Node.js
Если нужен общий маршрут по теме, откройте рубрику Node.js. Для соседних задач пригодятся эти разборы:
- Как запустить проект Node.js: npm install, package.json и команды start/dev
- Атака на npm axios RAT: Атака на npm axios через RAT: как sloppy-joe
- Как инициализировать проект Node.js с package.json и первым запуском
- Как обновить Node.js через npm: что можно, а что лучше не делать