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

npm

npm - это менеджер пакетов, который управляет модулями и зависимостями проекта. В Node.js npm уже имеется по умолчанию, поэтому его отдельная установка не требуется.

Все пакеты хранятся в облачном репозитории на официальном сайте. Вы также можете создать свой модуль и опубликовать его в репозитории для общего использования.

Прежде, чем начинать разрабатывать собственный модуль, попробуйте поискать его в npm репозитории. Наверняка уже будет существовать готовое решение, которое сэкономит ваше время.

Node.js npm также избавляет разработчика от необходимости хранить все используемые сторонние модули в удаленных репозиториях. За это отвечает файл package.json.

package.json

В npm файл package.json используется для описания модулей, от которых зависимо ваше приложение, и содержит ряд метаданных о приложении. Рассмотрим на примере. Предположим, у вас есть проект, корневая директория которого называется app. Перейдите в app через командную строку и введите команду.

1
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "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. Из корневой директории проекта необходимо выполнить команду.

1
npm install --save express

Все модули устанавливаются в директорию node_modules той директории, откуда была вызвана команда npm install.

Флаг --save указывает на то, что мы хотим внести данный модуль в список зависимостей в файл package.json. И когда возникнет необходимость запустить приложение в другой среде, то совсем не обязательно также переносить и папку node_modules. Перенесите только файл package.json и выполните в командной строке.

1
npm install

И все указанные в package.json Node.js npm модули будут установлены в папку node_modules.

Если при установке пакета вы не хотите, чтобы он добавлялся в список зависимостей, то просто не указывайте флаг --save.

1
npm install express

После установки модуля с --save в package.json появится объект dependencies со списком зависимостей вашего проекта.

package.json

1
2
3
4
5
{
    "dependencies": {
        "express": ">= 1.2.0"
    }
}

Для задания установки определенной версии или версии из какого-либо диапазона, используйте оператор @.

1
2
npm install express@4.16.4
npm install express@">4.15.0 <4.16.0"

При указании диапазона версий задаваемое значение должно быть заключено в двойные кавычки.

Установка самой последней версии модуля может быть выполнена так.

1
npm install express@latest

В процессе разработки, например для тестирования или измерения показателей производительности, вам могут понадобиться Node.js npm модули, которые не будут использоваться и даже не должны устанавливаться в среде production. Чтобы установить npm модуль только для среды разработки, укажите флаг --save-dev.

1
npm install logger-service --save-dev

Теперь в package.json должен появиться новый блок devDependencies.

package.json

1
2
3
4
5
6
7
8
{
    "dependencies": {
        "express": ">= 1.2.0"
    },
    "devDependencies": {
        "logger-service": ">= 1.0.2"
    }
}

Теперь рассмотрим глобальную установку пакетов. Допустим, на вашем сервере одновременно работают несколько разных Node.js приложений, но которые имеют общие зависимости. Чтобы не дублировать пакет в директории каждого проекта, вы можете установить его в вашу систему глобально с помощью флага -g и он будет доступен для использования во всей системе.

1
npm install express -g

С течением времени Node.js npm модули дорабатываются и улучшаются, а следовательно выходят их новые версии. Чтобы обновить все пакеты, описанные в package.json, используйте такую команду.

1
npm update

Обновление конкретного модуля, например Express, выглядит так.

1
npm update express

Для удаления пакет из зависимостей вашего проекта, используйте uninstall.

1
npm uninstall express

Если вы хотите также удалить его из package.json, просто укажите флаг --save.

1
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.