# Особенности работы Node Package Manager и файл package.json в Node.js

Node.js — среда выполнения JavaScript, работающая на движке V8 (транслирует Java в машинный код). Она позволяет создавать и использовать серверные приложения на JavcaScript, работает быстро и имеет привычный разработчикам синтаксис.

Одна из особенностей Node.js — это использование модулей — готовых приложений или частей кода, которые можно использовать при написании более сложных программ. Один или несколько модулей в Node.js называются пакетами. Для удобной работы с ними Node.js использует встроенный менеджер Node Package Manager (npm).

С помощью npm можно полноценно управлять всеми подключёнными к проекту пакетами. Он не только позволяет искать и устанавливать новые пакеты, но и следит за их версиями, прописывает в файле package.json все зависимости и может разворачивать проект с нуля, используя только записи в packasge.json.

В этой инструкции мы познакомимся с работой npm, изучим его взаимодействие с файлом package.json и в качестве примера установим на наш сервер блоговый движок Hexo.

Нам понадобится предварительно настроенный сервер с установленным Node.js.

# Начало проекта

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

mkdir hexo
cd hexo

Создадим файл package.json, в котором будут содержаться все основные сведения о нашем проекте (от метаданных до номеров версий используемых пакетов):

Для этого нужно инициализировать нашу текущую директорию в качестве основной директории проекта. Вводим команду:

npm init

Она запустит автоматическое создание файла package.json, в процессе которого мы вручную введём метаданные нашего проекта. После запуска команды на экране появится сообщение:


This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (hexo1)

Нам нужно будет указать общие сведения о проекте:

  • package name — название проекта.
  • version — номер версии.
  • description — описание нашего проекта.
  • entry point — «точка входа» — первая часть вашего модуля, которую будут загружать другие пользователи, если захотят скачать его. Мы оставим это значение заполненным по умолчанию (index.js).
  • test command — указание на фреймворк, который будет использован для тестирования нашего приложения. Поскольку мы не описываем здесь тестирование проекта, оставим эту часть незаполненной.
  • git repository — указание на репозиторий, в котором мы будем хранить наш проект. В нашем случае оставляем это поле незаполненным.
  • keywords — ключевые слова, по которым можно будет найти ваш модуль в поиске npm.
  • author — ваше имя и контактный e-mail, чтобы пользователи смогли связаться с вами в случае возникновения ошибок в работе модуля.
  • license — тип лицензии. Если вы работаете самостоятельно, можно указать Unlicensed.

После этого на экране появятся все указанные нами данные, чтобы мы могли проверить их правильность. Проверяем и нажимаем Enter.

Теперь посмотрим на содержимое файла package.json:

vim package.json

В зависимости от указанных данных содержимое файла будет примерно таким:

{
  "name": "hexo",
  "version": "1.0.0",
  "description": "Blog for test",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Author / Author’s e-mail",
  "license": "UNLICENSED"
}

Теперь у нас есть первый файл нашего проекта, можно переходить к установке дополнительных модулей (пакетов).

# Установка модулей. Node Package Manager

Для добавления в проект дополнительных модулей (пакетов) Node.js использует пакетный менеджер npm. Можно использовать команду install или её более короткую версию i.

Установим наш выбранный блоговый движок:

npm i hexo-cli@4.1.0

В этой команде мы специально указали версию устанавливаемого клиента «4.1.0», чтобы в дальнейшем на её примере показать возможность работы npm с обновлениями версий установленных модулей. Если вы не укажете версию пакета, npm установит последнюю из доступных.

Во время установки npm не только устанавливает выбранный модуль, но и добавляет сведения о нём в файл package.json, указывая его в разделе зависимостей. Теперь, если снова открыть package.json, можно увидеть, что в конце добавились новые строчки:

...
  "dependencies": {
    "hexo-cli": "^4.1.0"
}

При добавлении следующих модулей они появятся в package.json следующими строками. Список всех добавленных к проекту модулей можно посмотреть командой ls:

npm ls

Если к команде lsдобавить директиву depth №, где вместо «№» указать число от 0 до 3, то помимо списка всех модулей на экране будут отображены все зависимости для данного модуля.

# Обновление модулей

С помощью npm можно отслеживать версии установленных модулей и рекомендовать к установке более поздние. Вводим команду:

npm outdated

Она выведет на экран список установленных модулей с номерами текущих и доступных для установки версий:


npm outdated

Package   Current  Wanted  Latest  Location               Depended by
hexo-cli   4.1.0   4.3.0   4.3.0   node_modules/hexo-cli  hexo1

Как видим, для модуля hexo-cli доступна более новая версия. Обновим его:

npm up hexo-cli

Менеджер обновит зависимости и установит последнюю версию данного модуля. Проверить, что всё прошло успешно, можно командой:

hexo -v

Мы увидим на экране примерно такую информацию:

hexo-cli: 4.3.0
os: linux 5.4.0 Ubuntu 20.04.3 LTS (Focal Fossa)
node: 17.2.0
v8: 9.6.180.14-node.12
uv: 1.42.0
zlib: 1.2.11
brotli: 1.0.9
ares: 1.18.1
modules: 102
nghttp2: 1.45.1
napi: 8
llhttp: 6.0.4
openssl: 3.0.0+quic
cldr: 40.0
icu: 70.1
tz: 2021a3
unicode: 14.0
ngtcp2: 0.1.0-DEV
nghttp3: 0.1.0-DEV

# Проверка проекта на уязвимости

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

npm audit

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

Прежде чем переходить к запуску Hexo, обратимся к файлу с зависимостями package.json.

# package.json

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

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

npm install

Без указания конкретного пакета для установки npm просканирует package.json и установит оттуда все необходимые модули.

# Запуск Hexo

Для запуска Hexo создадим новую директорию и перейдём в неё:

mkdir blog
cd blog

Инициализируем эту директорию как домашнюю директорию нашего блога:

hexo init

Клиент Hexo создаст необходимые файлы, в том числе package.json для блога, в котором пропишет необходимые для установки дополнительные модули. После завершения инициализации папки установим дополнительные модули, указанные Hexo:

npm install

Менеджер npm обратится к файлу с зависимостями package.json и установит недостающие модули.

Теперь нужно изменить конфигурационный файл Hexo, чтобы запустить его на нашем хосте. Откроем для этого конфигурационный файл _config.yml:

vim config.yml

Здесь в строке URL укажем наш хост. Если ваш VPS расположен на Джино, но вы ещё не привязали к нему домен, можете указать технический адрес своего сервера.

Также нужно изменить параметр default_layout на draft и post_asset_folder на true.

Сохраним изменения в файле конфигурации и запустим Hexo для проверки его работы:

hexo server

По умолчанию Hexo использует для работы порт 4000. Чтобы проверить работу Hexo, откройте браузер и в адресной строке укажите http://your_domain.name:4000.

Если ваш VPS расположен на Джино, но вы не используете Выделенный IP, то для подключения к Hexo нужно будет воспользоваться Перенаправлением портов. В разделе УправлениеПеренаправление портов создайте перенаправление для порта 4000. После этого при подключении к Hexo в адресной строке браузера нужно будет указывать новый номер порта.

Если всё указано правильно, вы увидите стартовую страницу Hexo.

В дальнейшем использование готовых модулей и управление ими при помощи npm значительно упростит и ускорит вашу работу с Node.js.