Управление зависимостями в проектах Node.js осуществляется с помощью менеджера пакетов npm. Рассмотрим установку, удаление и управление зависимостями разработки и производственными зависимостями.
Удаление и установка зависимостей
Удалим зависимость browserslist командой: npm uninstall browserslist. После выполнения этой команды пакет browserslist, а также его зависимости, будут удалены из проекта. В файле package.json browserslist отсутствует, а папка node_modules пуста после обновления.
Добавим browserslist как зависимость разработки командой: npm install —save-dev browserslist или npm install -D browserslist. Вместе с browserslist установятся его зависимости: caniuse-lite, electron-to-chromium. Установка пакета включает установку его зависимостей, независимо от типа зависимости (разработки или продакшена).
Установка из package.json
Удалим папку node_modules. Команда npm install (или npm i) установит все пакеты заново на основе информации из package.json. Это полезно при переносе проекта на другой компьютер или при использовании системы контроля версий, такой как Git, поскольку папку node_modules обычно не нужно добавлять в репозиторий. Её размер может достигать сотен мегабайт.
Флаг —production
Удалим папку node_modules и выполним установку с флагом —production: npm install —production или npm i —production. Будут установлены только пакеты из раздела dependencies в package.json. Зависимости из devDependencies, включая их собственные зависимости, установлены не будут. В нашем примере будут установлены только moment и sambar.
dependencies vs devDependencies
Файл package.json содержит два типа зависимостей: dependencies и devDependencies. npm install устанавливает все зависимости обоих типов. npm install —production устанавливает только зависимости из dependencies. Даже если пакет из devDependencies имеет зависимости, они не будут установлены. Например, moment содержит множество зависимостей в devDependencies, но они не будут установлены при использовании флага —production.
Выбор типа зависимости
При добавлении пакета необходимо выбрать тип зависимости: dependency или devDependencies. Выбор зависит от того, необходим ли пакет для работы приложения в продакшене или только для разработки.