npm¶
npm - это менеджер пакетов, который управляет модулями и зависимостями проекта. В Node.js npm уже имеется по умолчанию, поэтому его отдельная установка не требуется.
Все пакеты хранятся в облачном репозитории на официальном сайте. Вы также можете создать свой модуль и опубликовать его в репозитории для общего использования.
Прежде, чем начинать разрабатывать собственный модуль, попробуйте поискать его в npm репозитории. Наверняка уже будет существовать готовое решение, которое сэкономит ваше время.
Node.js npm также избавляет разработчика от необходимости хранить все используемые сторонние модули в удаленных репозиториях. За это отвечает файл package.json
.
package.json¶
В npm файл package.json
используется для описания модулей, от которых зависимо ваше приложение, и содержит ряд метаданных о приложении. Рассмотрим на примере. Предположим, у вас есть проект, корневая директория которого называется app
. Перейдите в app
через командную строку и введите команду.
npm init
Вам будет предложено ввести некоторые данные, на основе которых Node.js npm сгенерирует файл package.json
. Структура файла:
name
- название приложения;version
- версия;description
- описание;main
- главный файл приложения, который отвечает за его запуск (хорошей практикой считается давать названиеapp.js
илиindex.js
);scripts
- объект, описывающий команды, которые часто приходится выполнять в процессе разработки и упрощающий их использование;repository
- ссылка на Git репозиторий, где хранится проект;keywords
- массив ключевых слов, по которым будет осуществляться поиск модуля на сайте npm (если он будет там опубликован);author
- разработчик;license
- лицензия, под которой будет распространяться приложение.
Пример, как может выглядеть package.json
.
package.json
{
"name": "webdraftt.com",
"version": "1.0.0",
"description": "My first Node js application",
"main": "app.js",
"scripts": {
"build": "webpack"
},
"repository": {
"type": "git",
"url": "https://github.com/webdraftt/webfraftt"
},
"keywords": ["angular", "rxjs", "ngrx", "node js", "npm"],
"author": "webdraftt",
"license": "ISC"
}
Если вы не планируете публиковать свое приложение в общем репозитории npm, то заполнять все поля совсем не обязательно. Вполне будет достаточно для собственного удобства указать name
, version
и description
.
Управление модулями npm¶
Модули - это приложения, которые реализовывают некоторый функционал и могут быть использованы для разработки более сложных приложений. Например, фреймворк Express является устанавливаемым модулем. Рассмотрим установку пакета на примере Express. Из корневой директории проекта необходимо выполнить команду.
npm install --save express
Все модули устанавливаются в директорию node_modules
той директории, откуда была вызвана команда npm install
.
Флаг --save
указывает на то, что мы хотим внести данный модуль в список зависимостей в файл package.json
. И когда возникнет необходимость запустить приложение в другой среде, то совсем не обязательно также переносить и папку node_modules
. Перенесите только файл package.json
и выполните в командной строке.
npm install
И все указанные в package.json
Node.js npm модули будут установлены в папку node_modules
.
Если при установке пакета вы не хотите, чтобы он добавлялся в список зависимостей, то просто не указывайте флаг --save
.
npm install express
После установки модуля с --save
в package.json
появится объект dependencies
со списком зависимостей вашего проекта.
package.json
{
"dependencies": {
"express": ">= 1.2.0"
}
}
Для задания установки определенной версии или версии из какого-либо диапазона, используйте оператор @
.
npm install [email protected]
npm install [email protected]">4.15.0 <4.16.0"
При указании диапазона версий задаваемое значение должно быть заключено в двойные кавычки.
Установка самой последней версии модуля может быть выполнена так.
npm install [email protected]
В процессе разработки, например для тестирования или измерения показателей производительности, вам могут понадобиться Node.js npm модули, которые не будут использоваться и даже не должны устанавливаться в среде production
. Чтобы установить npm модуль только для среды разработки, укажите флаг --save-dev
.
npm install logger-service --save-dev
Теперь в package.json
должен появиться новый блок devDependencies
.
package.json
{
"dependencies": {
"express": ">= 1.2.0"
},
"devDependencies": {
"logger-service": ">= 1.0.2"
}
}
Теперь рассмотрим глобальную установку пакетов. Допустим, на вашем сервере одновременно работают несколько разных Node.js приложений, но которые имеют общие зависимости. Чтобы не дублировать пакет в директории каждого проекта, вы можете установить его в вашу систему глобально с помощью флага -g
и он будет доступен для использования во всей системе.
npm install express -g
С течением времени Node.js npm модули дорабатываются и улучшаются, а следовательно выходят их новые версии. Чтобы обновить все пакеты, описанные в package.json
, используйте такую команду.
npm update
Обновление конкретного модуля, например Express, выглядит так.
npm update express
Для удаления пакет из зависимостей вашего проекта, используйте uninstall
.
npm uninstall express
Если вы хотите также удалить его из package.json
, просто укажите флаг --save
.
npm uninstall express --save
package-lock.json¶
Сразу после установки хотя бы одного Node.js npm модуля вы увидите, что рядом с package.json
был создан файл package-lock.json
, который будет обновляться каждый раз при добавлении новой зависимости.
В package-lock.json
содержится описание состояния текущей иерархии используемых в приложении модулей: их точные версии и точные версии используемых ими модулей и так до конца. При развертывании Node.js приложения в новой среде наличие файла package-lock.json
гарантирует, что будут установлены версии тех пакетов, которые использовались в разработке в последний раз.
Описание файла package-lock.json
имеет более высокий приоритет в сравнении с описанием зависимостей package.json
.