В Node.js для применения любых внесенных изменений требуется перезапуск процесса. Если идет активная разработка, это добавляет к работе дополнительный шаг, который надо повторить неоднократно, периодически. Его можно убрать при помощи утилиты nodemon, предназначенной для перезапуска процессов в автоматическом режиме.
Принцип работы приложения заключается в размещении среды внутри своеобразной «оболочки» для мониторинга файловой системы и перезапуска процесса. В этой статье мы последовательно разберем, как провести установку nodemon на машине с Node.js, так и настройку утилиты, использование встроенных в нее опций и конфигураций.
Понадобится локальная машина или виртуальный сервер VPS/VDS, подходящий по техническим характеристикам. Они включают минимум процессор с тактовой частотой 1 ГГц, ОЗУ от 512 Мбайт, свободное пространство на накопителе от 15 Мбайт. Также нужно произвести установку Node.js по инструкции из официальной документации, создать среду разработчика (а это уже тема для отдельной статьи).
Первым этапом всегда идет установки утилиты на рабочем или виртуальном компьютере. Есть два варианта – глобальная и локальная инсталляция. Выполнить процедуру можно через npm
или yarn
.
Выполним команду через npm
:
npm install nodemon –g
Или yarn
:
yarn global add nodemon
При локальной инсталляции допустимо задавать зависимость dev
:
npm install nodemon --save-dev
При помощи yarn
команда будет выглядеть так:
yarn add nodemon –dev
Процедура установки завершена, можно приступать к дальнейшей работе.
С практической стороны интересна возможность старта скриптов Node с nodemon. Возьмем пример: в наличии есть файл для задания параметров, сохраненный под именем serv.js
. Введем команду и понаблюдаем за происходящими корректировками:
nodemon serv.js
При запуске допускается передавать аргументы в том же порядке, как будто скрипт запускается при помощи Node:
nodemon serv.js 3006
Процесс перезапустится после каждой корректировки файлов. Речь идет только об отслеживаемых расширениях (.js, .mjs, .json, .coffee, .litcofee) и текущей папке. В качестве примера возьмем все тот же файл serv.js
и внесем в него команду на вывод сообщения:
Dolphin app listening on port ${port}.
Теперь введем команду:
nodemon serv.js
На экран будет выведено сообщение:
[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node serv.js`
Dolphin app listening on port 3000!
Пока утилита функционирует, сделаем корректировки в файле serv.js
. Например, чтобы скрипт вывел сообщение Shark app listening on port ${port}
. Информация на экране обновится, мы увидим:
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Shark app listening on port 3000!
Как и планировалось, идет вывод о произведенных изменениях. Рестарт процесса возможен по желанию пользователя – достаточно набрать команду rs
и кликнуть Enter.
Конфигурация утилиты nodemon управляется путем применения различных опций, вводимых в командной строке. Рассмотрим часть из них, которые встречаются чаще остальных:
--exec
– задает двоичный код, считываемый при выполнении файлов. Так, в случае указания ts-node
утилита будет наблюдать за запуском TypeScript, происходящими в нем изменениями.--ext
– опция указывает утилите nodemon
, какие расширения будут подпадать под функцию наблюдения. Вносить перечень следует через запятую. Например, js, ts.--delay
– устанавливает время до перезапуска процесса после фиксации изменений в файле. По умолчанию это значение равно одной секунде. Новое требуется указывать в цифровом виде, например 3.1.--watch
– позволяет задать наблюдение за несколькими файлами или директориями. Опцию используют отдельно для каждого объекта. По умолчанию утилита мониторит текущую папку и вложенные в нее каталоги. При помощи watch
можно как расширить сферу работы nodemon
, так и сузить сектор наблюдения, отключив часть вложенных папок или файлов, расположенных в них.--ignore
– аналогично предыдущей опции, предназначена для принудительного отключения наблюдения за указанными файлами, папками или шаблонами.--verbose
– дает подробное информирование об измененных файлах, процедуре рестарта процесса.Полный перечень опций доступен по команде:
nodemon --help
Приведем пример их комбинированного использования. Предположим, что необходимо включить мониторинг файлов с расширением .ts в каталоге server, при этом пропускать файлы с суффиксом .test.ts и ждать рестарта в течение 3-х секунд после фиксации факта сохранения изменений. А также при запуске применять двоичный код ts-node
.
Команда будет выглядеть так:
nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts
Здесь одновременно используются опции --watch
, --ext
, --exec
, --ignore
и --delay
.
Если думать о том, как упростить работу с Node.js, стоит настроить и параметры конфигурации. Например, задать перечень нужных опций в nodemon.json. Тогда появится возможность пакетного старта утилиты. Пример такого файла:
{"watch": ["server"],
"ext": "ts",
"ignore": ["*.test.ts"],
"delay": "3",
"execMap": {
"ts": "ts-node"
}
}
Здесь execMap
заменяет оператор exec
. Он разрешает указывать двоичный код, подключаемый при обработке указанных расширений файлов.
Есть другой вариант добавления конфигурации – скорректировать файл 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 server/server.ts
Приложение подхватит конфигурацию и начнет работать в соответствии с заданными параметрами. Такой подход позволяет быстро настраивать новые системы и передавать настройки другим, чтобы не тратить время на синхронизацию командных компьютеров.
Мы рассмотрели краткую информацию по инсталляции и настройке утилиты nodemon для контроля обновлений файлов в среде Node. Это решение популярно благодаря автоматизации рутинных задач остановки-запуска сервера. При отсутствии под рукой локальной машины для экспериментов, стоит взять в аренду мощности у провайдера Timeweb Cloud.
Ещё удобно прописать в
package.json
:И запускать командой: