# Особенности работы 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.
После этого на экране появятся все указанные нами данные, чтобы мы могли проверить их правильность. Проверяем и нажимаем
.Теперь посмотрим на содержимое файла 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.