1. Что такое зависимости и зачем ими управлять
Любой современный проект на Node.js редко обходится без сторонних библиотек — будь то Express, lodash, chalk или даже что-то экзотичное вроде left-pad (да, это реальная библиотека, которая добавляет пробелы в начало строки — программисты иногда бывают очень ленивыми). Все эти библиотеки называются зависимостями (dependencies), потому что ваш проект зависит от них для своей работы.
npm (Node Package Manager) — это как огромный склад с миллионами пакетов, который позволяет быстро добавить в ваш проект нужную библиотеку, обновить её, удалить или заменить на другую.
2. Установка зависимостей: npm install
Основной синтаксис
Чтобы установить новую зависимость, используйте команду:
npm install <название_пакета>
# или коротко:
npm i <название_пакета>
Например, чтобы добавить популярную библиотеку chalk (для красивой раскраски текста в консоли):
npm install chalk
Что происходит после этого?
- В папке node_modules/ появляется папка с библиотекой chalk и всеми её зависимостями.
- В файле package.json в раздел dependencies добавляется запись:
{
"dependencies": {
"chalk": "^5.3.0"
}
}
- Создаётся или обновляется файл package-lock.json — он фиксирует точные версии всех установленных пакетов (и их зависимостей), чтобы у всех разработчиков был одинаковый набор библиотек.
Установка нескольких зависимостей
Можно установить сразу несколько пакетов, перечислив их через пробел:
npm install express morgan cors
Локальные и глобальные зависимости
Локальная установка (по умолчанию):
- Библиотека устанавливается только для текущего проекта.
- Хранится в папке node_modules/ рядом с вашим проектом.
- Запись появляется в package.json.
Глобальная установка (редко нужна новичку):
- Используйте ключ -g или --global.
- Пакет устанавливается для всей системы, а не для конкретного проекта.
- Пример: установка create-react-app или nodemon для запуска из любой папки.
npm install -g nodemon
Внимание: Не устанавливайте обычные зависимости глобально — это приведёт к путанице. Обычные библиотеки (Express, chalk и т.д.) всегда ставьте локально.
Установка devDependencies (зависимости только для разработки)
Иногда нужны библиотеки только для разработки — например, eslint, prettier, jest. Чтобы npm знал, что эти пакеты не нужны на продакшене, используйте флаг --save-dev или коротко -D:
npm install --save-dev eslint
# или
npm i -D jest
В package.json появится раздел:
{
"devDependencies": {
"eslint": "^8.0.0"
}
}
Установка конкретной версии
Иногда нужно установить не последнюю, а определённую версию пакета. Например, если новая версия сломала ваш проект (такое бывает чаще, чем хотелось бы):
npm install express@4.18.2
3. Удаление зависимостей: npm uninstall
Иногда приходится признавать: "Эта библиотека была ошибкой". Или просто больше не нужна.
Удалить зависимость можно так:
npm uninstall <название_пакета>
# или коротко:
npm remove <название_пакета>
Пример:
npm uninstall chalk
Что произойдёт:
- Папка с библиотекой исчезнет из node_modules/.
- Запись исчезнет из package.json (из раздела dependencies или devDependencies).
- Обновится package-lock.json.
Внимание: Если вы удалили пакет, но продолжаете пытаться его использовать в коде (например, require('chalk')), получите ошибку "Cannot find module".
Удаление из devDependencies
Если пакет был установлен как devDependency, удалять его нужно точно так же:
npm uninstall --save-dev eslint
# или
npm remove -D jest
Удаление нескольких пакетов
Можно удалить сразу несколько зависимостей:
npm uninstall express cors morgan
4. Обновление зависимостей: npm update
Мир npm не стоит на месте — новые версии библиотек выходят постоянно. Иногда это хорошо (исправляют баги, добавляют фичи), иногда — не очень (ломают обратную совместимость).
Обновление всех зависимостей
Чтобы обновить все зависимости до последних совместимых версий (с учётом ограничений в package.json):
npm update
npm посмотрит на версии в package.json (например, "^4.18.0") и обновит до самой свежей версии, подходящей под это ограничение (например, до 4.18.2, но не до 5.0.0).
Обновление одной зависимости
Можно обновить только одну библиотеку:
npm update <название_пакета>
Обновление до последней версии (игнорируя ограничения)
Если хотите обновить пакет до самой последней версии (даже если это major update — например, с 4.x.x на 5.x.x):
npm install <название_пакета>@latest
Пример:
npm install express@latest
Проверка устаревших пакетов
Чтобы узнать, какие пакеты устарели:
npm outdated
Вы увидите таблицу:
| Package | Current | Wanted | Latest | Location |
|---|---|---|---|---|
| express | 4.18.2 | 4.18.2 | 5.0.0 | my-app |
| chalk | 5.3.0 | 5.3.0 | 5.4.0 | my-app |
- Current — текущая установленная версия
- Wanted — максимальная версия, которую можно поставить без изменения ограничений в package.json
- Latest — самая свежая версия на npm
Автоматическое обновление package.json
Если хотите, чтобы в package.json сразу прописалась самая свежая версия:
npm install <название_пакета>@latest --save
5. Удаление всех зависимостей (жесткая чистка)
Иногда проект превращается в "npm-болото": слишком много лишних библиотек, или кто-то случайно удалил папку node_modules/, и всё сломалось. Не беда!
Чтобы полностью пересобрать зависимости, просто удалите папку node_modules/ и файл package-lock.json, затем выполните:
npm install
npm прочитает ваш package.json и установит все нужные библиотеки заново.
6. Практика: пример установки, обновления и удаления
Давайте попробуем на практике. Представим, что вы разрабатываете To-Do приложение и решили добавить библиотеку для красивых логов.
1. Установка
npm install chalk
Теперь можно использовать chalk в коде:
// index.js
const chalk = require('chalk');
console.log(chalk.green('Task completed!'));
2. Обновление
Через месяц вышла новая версия chalk. Проверяем:
npm outdated
Видим, что есть новая версия. Обновляем:
npm install chalk@latest
3. Удаление
Решили, что зелёный цвет — это слишком. Удаляем chalk:
npm uninstall chalk
Пробуем запустить проект — получаем ошибку. Убираем все вызовы chalk из кода.
7. Особые случаи и нюансы
Случай 1: Установка пакета только для разработки
Например, для тестирования:
npm install --save-dev jest
Теперь в package.json:
{
"devDependencies": {
"jest": "^29.0.0"
}
}
Случай 2: Установка глобального пакета
Часто используют для утилит, которые нужны во всех проектах:
npm install -g nodemon
Теперь можно запускать nodemon из любой папки.
Случай 3: Пакеты, которые не нужны в package.json
Иногда вы хотите просто поиграться с библиотекой, не записывая её в зависимости. Используйте флаг --no-save:
npm install chalk --no-save
8. Типичные ошибки при управлении зависимостями
Ошибка №1: Удалили зависимость вручную из node_modules, забыли про package.json.
Результат: при следующем запуске npm install она снова появится. Удаляйте зависимости только через npm uninstall.
Ошибка №2: Установили пакет глобально, а пытаетесь использовать его как локальный.
Результат: require не найдёт пакет, если он не установлен локально.
Ошибка №3: Не обновили package-lock.json.
Если вручную редактировать package.json и не запустить npm install, структура зависимостей может "поехать". Всегда используйте npm-команды для управления зависимостями.
Ошибка №4: Удалили пакет, но забыли убрать его из кода.
Результат — ошибка "Cannot find module". После удаления обязательно чистите код.
Ошибка №5: Обновили зависимости, а проект перестал работать.
Major-обновления могут быть несовместимы с вашим кодом. Перед обновлением читайте changelog и делайте бэкап (или используйте git).
Ошибка №6: Установили пакет без флага --save-dev, хотя он нужен только для разработки.
В итоге dev-зависимости попадают в production, увеличивая размер сборки.
Ошибка №7: Сломали package-lock.json вручную.
Этот файл лучше не трогать руками — npm сам всё сделает правильно.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ