Управления пакетами Node.js в Linux. Пакетный менеджер NPM

Node.js – это довольно популярная платформа для ведения серверной разработки веб-приложений, а также других сетевых приложений. Функционал самой платформы Node.js постоянно совершенствуется и дополняется при помощи программных пакетов. Как следствие, для управления и настройки требуемого функционала Node.js существует специальный инструмент — пакетный менеджер NPM. О том, какие базовые возможности по управлению пакетами Node.js имеются у NPM и как ими пользоваться, будет рассмотрено в данной статье.

Некоторые полезные функции NPM

Для начала установить NPM и Node.js (на примере Ubuntu) можно командой:

$ sudo apt install nodejs npm

Соответствующие пакеты предусмотрены в стандартных репозиториях практически любого дистрибутива Linux.
После установки NPM нужно настроить его для использования функции автодополнения команд. Для этого нужно внести некоторые настройки в конфигурационный файл пользовательской среды ~/.bashrc:

$ npm completion >> ~/.bashrc
$ source ~/.bashrc

После этого ввод команд NPM будет сопровождаться автодополнением, что очень удобно и экономит много времени при работе с пакетами. Автодополнение включается по нажатию клавиши «Tab».
Второй полезной функцией является подкоманда help, которая позволяет получать справку по другим подкомандами, например:

$ npm help имя_подкоманды

В результате будет выведено содержимое руководства по использованию указанной команды. Также имеется возможность использовать поиск по разделам справки, используя подкоманду help-search:

$ npm help-search требуемый_термин

В качестве параметра «требуемый_термин» можно указать интересующее действие, например «update» или «install». В результате будут показаны соответствующие разделы справки. Очень полезно, когда нужно узнать, какая команда выполняет те или иные действия.

Глобальные и локальные пакеты

Пакеты Node.js бывают локальные и глобальные. Первые устанавливаются в каталог с проектом, для поддержки которого они необходимы и доступны только этому проекту. Глобальные пакеты устанавливаются в каталог ~/.npm/ (а также в /usr/local/lib/, в зависимости от дистрибутива) и могут быть доступны для использования и поддержки во всех проектах. При локальном варианте установки пакетов они по-умолчанию помещаются в подкаталог node_modules/, в каталоге проекта.

Этот механизм разделения пакетов на глобальные и локальные позволяет разработчикам гибко управлять переносимостью своих приложений в целях уменьшения времени их разворачивания в новой среде разработки или напротив — избавляя от всего лишнего. К тому же, такой подход позволяет гибко настраивать и саму среду разработки, рационально задействовав некоторые особенности и функции различных пакетов.

По-умолчанию пакетный менеджер NPM предполагает, что все пакеты установлены локально. Поэтому, для того, чтобы получить доступ к пакетам, установленным глобально, необходимо в командах npm использовать опцию «-g» или «—global».
Поиск информации о пакетах
Для начала нужно определить, какие вообще пакеты установлены. Список локальных пакетов (для конкретного проекта) позволяет получить команда:

$ npm ls
/home/john/node-projects/test_project
└── (empty)

В данном примере команда выполняется в каталоге с проектом и список локальных пакетов пуст, поскольку они не устанавливались. Но следует заметить, что вывод представляется в виде дерева. Несмотря на то что локальных пакетов для проекта test_project ещё нет, однако NPM в базовом варианте предоставляет некоторые глобальные пакеты. Чтобы их увидеть, нужно выполнить команду:

$ npm ls -g
/home/john/.nvm/v0.11.13/lib
└── npm@1.4.9
├── abbrev@1.0.4
├── ansi@0.2.1
├── ansicolors@0.3.2
. . .
├── ansistyles@0.1.3
├── archy@0.0.2

Как можно видеть, список может быть довольно большим.
Для того, чтобы открыть оболочку того или иного пакета, следует использовать подкоманду explore:

$ npm explore -g npm
Exploring /home/john/.nvm/v0.11.13/lib/node_modules/npm
Type 'exit' or ^D when finished

В данном примере была открыта оболочка самого пакета NPM. По завершению работы в оболочке пакета нужно набрать команду exit – будет осуществлён перевод в оболочку изначального проекта.

Чтобы узнать, какой каталог является корневым для пакетной среды проекта, нужно использовать подкоманду root:

$ npm root
/home/john/node-projects/test_project/node_modules

Чтобы узнать корневой каталог проекта, существует подкоманда prefix:

$ npm prefix
/home/john/node-projects/test_project

Расположение исполняемых файлов пакетов можно узнать подкомандой bin:

$ npm bin
/home/john/node-projects/test_project/node_modules/.bin

Поиск и установка пакетов NPM

С помощью NPM можно производить поиск необходимых пакетов, используя подкоманду search. Хранилище доступных пакетов предоставляется ресурсом https://www.npmjs.org. Например, если проекту необходим PHP-фреймворк CodeIgniter, то найти его можно, выполнив команду:

$ npm search codeigniter

В результате буде выведен довольно длинный список пакетов с описанием каждого из них. Поскольку проектов, связанных с искомым CodeIgniter может быть много, то изучение их описаний поможет быстро найти в списке именно тот, который нужен. Далее, установить выбранный пакет позволяет команда:

$ npm install codeigniter

В результате будет выполнена локальная установка пакета для текущего проекта в его директории. Для глобальной установки, чтобы фреймворк CodeIgniter был доступен для других проектов, при установке необходимо использовать опцию «-g»:

$ npm install -g codeigniter

В обоих случаях будет произведена загрузка пакета со всеми его зависимостями, а также произведена их установка. Для локальной установки для проекта предварительно необходимо перейти в каталог с этим проектом:

$ cd ~/node-projects/test_project

Удаление и согласование зависимостей пакетов

В большинстве случаев для проектов Node.js необходима и локальная и глобальная установка пакетов. Это довольно расточительно в плане использования дискового пространства. Поэтому для этого случая есть способ «связывания» глобального и локального пакетов между собой. Он заключается в создании ссылки из локальной установки пакета на глобальную или наоборот. Сделать это можно следующим образом: для начала нужно удалить пакет, например его локальную версию:

$ npm uninstall codeigniter

Теперь необходимо «связать» глобальную (которая не удалялась) копию пакета с его локальной копией. Создав в каталоге проекта (локальной среде пакетов) символическую ссылку на глобальный пакет:

$ npm link codeigniter

Естественно, для данного случая необходимо заранее переместиться в каталог с необходимым проектом, в котором нужно сделать связывание с глобальным пакетом. В результате оба пакета (локальный и глобальный) будут доступны проекту. Символические ссылки при необходимости можно удалять также, как и сам пакет.

Если же имеется только локально установленный пакет, то ссылку на глобальный можно создать прямо из каталога локальной установки самого пакета. Но при этом подкоманда link даётся без дополнительный параметров:

$ cd ~/node-projects/test_project/node_modules/codeigniter
$ npm link

Некоторые пакеты имеют одни и те же зависимости. Рационально использовать одну копию этих зависимостей для нескольких пакетов, для которых они необходимы. Однако, по-умолчанию при установке пакетов NPM одни и те же зависимости устанавливаются для каждого пакета. Для того, чтобы исправить эту ситуацию существует подкоманда dedupe. Она заставляет пакеты с одинаковыми зависимостями «делиться» ими из одной установки, отслеживая и анализируя подобные ситуации. Например для того, чтобы дедуплицировать использование зависимостей для пакета codeigniter, необходимо выполнить подкоманду dedupe в каталоге с этим пакетом:

$ cd ~/node-projects/test_project/node_modules/codeigniter
$ npm dedupe

Бывает и так, что дедуплицированные зависимости больше не используются. Это происходит потому, что они ранее были дедуплицированы. Т. е. перемещены на другой уровень в системе каталогов проекта, а теперь их материнский пакет или модуль был удалён. В этом случае такие зависимости автоматически удалены не будут, однако они присутствуют без надобности. Для того, чтобы в подобных случаях очистить проект от неиспользуемых зависимостей используется подкоманда prune:

$ npm prune

В результате эта команда, вызванная в каталоге проекта, удалит все неиспользуемые для него зависимости.

Обновление пакетов

Пакетный менеджер NPM позволяет всегда узнать, каким пакетам требуется обновление. Для этого достаточно выполнить подкоманду uotdated:

$ npm outdated
. . .
Package Current Wanted Latest Location
type-is 1.1.0 1.1.0 1.2.0 express > type-is
debug 0.8.0 0.8.0 0.8.1 express > send > debug

В результате будет показан список пакетов, для которых имеются обновления с указанием версий этих обновлений. Но для того, чтобы корректно обновить сам пакет, часто требуется отредактировать файл package.json для этого пакета, указав требуемую версию обновления. И только после этого необходимо выполнить команду:

$ npm update

В результате, если файлы package.json были отредактированы правильно, NPM сам выполнит полное обновление пакетов.

Заключение

В заключение необходимо обратить внимание на то, что пакетный менеджер NPM действительно отлично справляется с теми задачами, для которых предназначен. У разработчиков нет необходимости тратить время на загрузку и установку пакетов (со всеми их зависимостями) вручную. Используя NPM можно развернуть даже самый сложный проект буквально за несколько минут.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: