Перейти к содержанию

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.