Автоматический перезапуск приложений Node.js с помощью nodemon

В Node.js нужно перезапускать процесс, чтобы обновления вступили в силу – а это дополнительный шаг в разработке. К счастью, его можно автоматизировать с помощью nodemon.

nodemon — это утилита интерфейса командной строки (CLI), разработанная @rem, которая отслеживает файловую систему приложения Node и автоматически перезапускает процесс, если есть такая необходимость.

В этом мануале вы научитесь устанавливать и настраивать nodemon.

Требования

Чтобы выполнить этот мануал, вам понадобится локальная установка Node.js. Чтобы получить такую, следуйте нашим инструкциям по установке Node.js и созданию локальной среды разработки:

Примечание: Больше мануалов по работе с Node.js вы найдете здесь.

1: Установка nodemon

Для начала нам нужно установить утилиту nodemon на свой компьютер. Установите ее глобально или локально с помощью npm или Yarn.

Читайте также: Добавление и удаление пакетов с помощью npm и Yarn

Глобальная установка nodemon

Чтобы установить nodemon глобально с помощью npm, введите:

npm install nodemon -g

Чтобы сделать это с помощью Yarn, введите:

yarn global add nodemon

Локальная установка nodemon

Вы можете установить nodemon локально (утилита будет доступна только в рамках вашего проекта, а не во всей системе). Утилиту nodemon можно установить как dev зависимость с помощью флага —save-dev (или —dev):

npm install nodemon --save-dev

Это можно сделать и с помощью Yarn:

yarn add nodemon --dev

Устанавливая nodemon локально, вы должны понимать, что не сможете использовать ее из командной строки.

command not found: nodemon

Однако вы сможете использовать утилиту как часть скриптов npm или запускать ее с помощью npx.

Читайте также: Использование скриптов npm в разработке

2: Создание простого проекта Express с помощью nodemon

Утилиту nodemon можно использовать для запуска скрипта Node. Например, если в файле server.js у вас есть конфигурация сервера Express, мы можем запустить его и проследить за изменениями с помощью команды:

nodemon server.js

Вы можете передавать команде аргументы (они передаются так же, как скриптам, запущенным с помощью Node):

nodemon server.js 3006

Каждый раз, когда вы вносите изменения в файл с одним из наблюдаемых по умолчанию расширений (это файлы .js, .mjs, .json, .coffee и .litcoffee) в текущем каталоге или подкаталоге, процесс перезапускается.

Предположим, мы записываем тестовый файл server.js, который выводит такое сообщение:

Dolphin app listening on port ${port}!

Мы можем запустить его с помощью утилиты nodemon:

nodemon server.js

И мы увидим следующий вывод в терминале:

[nodemon] 1.17.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting  `node server.js`
Dolphin app listening on port 3000!

Пока nodemon работает, давайте внесем изменения в файл server.js. Для примера попробуйте отредактировать сообщение:

Shark app listening on port ${port}!

Мы получим дополнительный вывод:

[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Shark app listening on port 3000!

Вывод приложения Node.js отображается должным образом. Вы можете перезапустить процесс в любое время, набрав rs и нажав Enter.

Также nodemon будет искать файл main, указанный в файле package.json вашего проекта:

{
// ...
"main": "server.js",
// ...
}

Или скрипт start:

{
// ...
"scripts": {
"start": "node server.js"
},
// ...
}

После внесения изменений в package.json вы можете вызвать nodemon, чтобы запустить пример приложения в режиме просмотра без необходимости передавать server.js.

3: Параметры nodemon

Вы можете изменить параметры конфигурации nodemon.

Давайте рассмотрим несколько основных опций:

  • —exec: позволяет указать двоичный файл, с помощью которого будет выполняться файл. Например, в сочетании с двоичным файлом ts-node —exec может отслеживать изменения и запускать файлы TypeScript.
  • —ext: указывает разные расширения отслеживаемых файлов. Эта опция принимает список расширений, разделенных запятыми (например, —ext js, ts).
  • —delay: по умолчанию nodemon ждет одну секунду, чтобы перезапустить процесс при изменении файла, но с помощью опции —delay вы можете указать другую продолжительность ожидания. Например, nodemon —delay 3.2 установит задержку в 3,2 секунды.
  • —watch: позволяет указать несколько отслеживаемых каталогов или файлов. Добавьте параметр —watch для каждого каталога, который вы хотите отслеживать. По умолчанию утилита отслеживает текущий каталог и его подкаталоги, а с помощью —watch вы можете сузить диапазон до определенных подкаталогов или файлов.
  • —ignore: позволяет игнорировать определенные файлы, шаблоны файлов или каталоги.
  • —verbose: выдает более подробный вывод с информацией о том, какие файлы были изменены и стали причиной перезапуска.

Вы можете просмотреть все доступные параметры с помощью следующей команды:

nodemon --help

Давайте с помощью этих параметров создадим команду, которая:

  • Отслеживает каталог server
  • Задает файлы с расширением .ts
  • Игнорирует файлы с суффиксом .test.ts
  • Выполняет файл (server/server.ts) с помощью ts-node
  • Ожидает перезапуска в течение трех секунд после изменения файла

nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts

Эта команда включает параметры —watch, —ext, —exec, —ignore и —delay, чтобы соответствовать условиям нашего сценария.

4: Конфигурация nodemon

Как видно из предыдущей команды, добавление флагов nodemon может оказаться довольно утомительным процессом. Лучшее решение для проектов, которым требуются определенные конфигурации, — указать эти конфигурации в файле nodemon.json.

Например, вот те же конфигурации, что и в предыдущей команде – только теперь они помещены в файл nodemon.json:

{
"watch": ["server"],
"ext": "ts",
"ignore": ["*.test.ts"],
"delay": "3",
"execMap": {
"ts": "ts-node"
}
}

Обратите внимание: вместо флага —exec мы используем здесь execMap. execMap позволяет указывать двоичные файлы, которые следует применять при определенных расширениях файлов.

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

{
"name": "test-nodemon",
"version": "1.0.0",
"description": "",
"nodemonConfig": {
"watch": [
"server"
],
"ext": "ts",
"ignore": [
"*.test.ts"
],
"delay": "3",
"execMap": {
"ts": "ts-node"
}
},
// ...

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

nodemon server/server.ts

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

Заключение

Теперь вы знаете, как использовать nodemon с вашими приложениями Node.js. Этот инструмент помогает автоматизировать процесс остановки и запуска сервера Node.

За дополнительной информацией о доступных функциях и устранении ошибок обратитесь к официальной документации.

Tags: , ,

Добавить комментарий