npm¶
npm - это менеджер пакетов, который управляет модулями и зависимостями проекта. В Node.js npm уже имеется по умолчанию, поэтому его отдельная установка не требуется.
Все пакеты хранятся в облачном репозитории на официальном сайте. Вы также можете создать свой модуль и опубликовать его в репозитории для общего использования.
Прежде, чем начинать разрабатывать собственный модуль, попробуйте поискать его в npm репозитории. Наверняка уже будет существовать готовое решение, которое сэкономит ваше время.
Node.js npm также избавляет разработчика от необходимости хранить все используемые сторонние модули в удаленных репозиториях. За это отвечает файл package.json.
package.json¶
В npm файл package.json используется для описания модулей, от которых зависимо ваше приложение, и содержит ряд метаданных о приложении. Рассмотрим на примере. Предположим, у вас есть проект, корневая директория которого называется app. Перейдите в app через командную строку и введите команду.
1 | |
Вам будет предложено ввести некоторые данные, на основе которых Node.js npm сгенерирует файл package.json. Структура файла:
name- название приложения;version- версия;description- описание;main- главный файл приложения, который отвечает за его запуск (хорошей практикой считается давать названиеapp.jsилиindex.js);scripts- объект, описывающий команды, которые часто приходится выполнять в процессе разработки и упрощающий их использование;repository- ссылка на Git репозиторий, где хранится проект;keywords- массив ключевых слов, по которым будет осуществляться поиск модуля на сайте npm (если он будет там опубликован);author- разработчик;license- лицензия, под которой будет распространяться приложение.
Пример, как может выглядеть package.json.
package.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Если вы не планируете публиковать свое приложение в общем репозитории npm, то заполнять все поля совсем не обязательно. Вполне будет достаточно для собственного удобства указать name, version и description.
Управление модулями npm¶
Модули - это приложения, которые реализовывают некоторый функционал и могут быть использованы для разработки более сложных приложений. Например, фреймворк Express является устанавливаемым модулем. Рассмотрим установку пакета на примере Express. Из корневой директории проекта необходимо выполнить команду.
1 | |
Все модули устанавливаются в директорию node_modules той директории, откуда была вызвана команда npm install.
Флаг --save указывает на то, что мы хотим внести данный модуль в список зависимостей в файл package.json. И когда возникнет необходимость запустить приложение в другой среде, то совсем не обязательно также переносить и папку node_modules. Перенесите только файл package.json и выполните в командной строке.
1 | |
И все указанные в package.json Node.js npm модули будут установлены в папку node_modules.
Если при установке пакета вы не хотите, чтобы он добавлялся в список зависимостей, то просто не указывайте флаг --save.
1 | |
После установки модуля с --save в package.json появится объект dependencies со списком зависимостей вашего проекта.
package.json
1 2 3 4 5 | |
Для задания установки определенной версии или версии из какого-либо диапазона, используйте оператор @.
1 2 | |
При указании диапазона версий задаваемое значение должно быть заключено в двойные кавычки.
Установка самой последней версии модуля может быть выполнена так.
1 | |
В процессе разработки, например для тестирования или измерения показателей производительности, вам могут понадобиться Node.js npm модули, которые не будут использоваться и даже не должны устанавливаться в среде production. Чтобы установить npm модуль только для среды разработки, укажите флаг --save-dev.
1 | |
Теперь в package.json должен появиться новый блок devDependencies.
package.json
1 2 3 4 5 6 7 8 | |
Теперь рассмотрим глобальную установку пакетов. Допустим, на вашем сервере одновременно работают несколько разных Node.js приложений, но которые имеют общие зависимости. Чтобы не дублировать пакет в директории каждого проекта, вы можете установить его в вашу систему глобально с помощью флага -g и он будет доступен для использования во всей системе.
1 | |
С течением времени Node.js npm модули дорабатываются и улучшаются, а следовательно выходят их новые версии. Чтобы обновить все пакеты, описанные в package.json, используйте такую команду.
1 | |
Обновление конкретного модуля, например Express, выглядит так.
1 | |
Для удаления пакет из зависимостей вашего проекта, используйте uninstall.
1 | |
Если вы хотите также удалить его из package.json, просто укажите флаг --save.
1 | |
package-lock.json¶
Сразу после установки хотя бы одного Node.js npm модуля вы увидите, что рядом с package.json был создан файл package-lock.json, который будет обновляться каждый раз при добавлении новой зависимости.
В package-lock.json содержится описание состояния текущей иерархии используемых в приложении модулей: их точные версии и точные версии используемых ими модулей и так до конца. При развертывании Node.js приложения в новой среде наличие файла package-lock.json гарантирует, что будут установлены версии тех пакетов, которые использовались в разработке в последний раз.
Описание файла package-lock.json имеет более высокий приоритет в сравнении с описанием зависимостей package.json.