URL: https://www.progressiverobot.com/workflow-nodemon-ru/

Введение

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

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

Из этой статьи вы узнаете об установке и настройке nodemon.

Предварительные требования

nodemon illustration for: Предварительные требования

Если вы захотите следовать за этой статьей, вам потребуется следующее:

Шаг 1 — Установка nodemon

Вначале вам нужно будет установить nodemon на вашем компьютере. Установите утилиту в проекте глобально или локально, используя npm или Yarn:

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

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

				
					
npm install nodemon -g

				
			

Или с помощью Yarn:

				
					
yarn global add nodemon

				
			

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

Также вы можете установить nodemon локально с помощью npm. При локальной установке мы можем установить nodemon как зависимость dev с помощью --save-dev (или --dev):

				
					
npm install nodemon --save-dev

				
			

Или с помощью Yarn:

				
					
yarn add nodemon --dev

				
			

При локальной установке нужно знать, сможете ли вы использовать команду nodemon напрямую из командной строки:

				
					
[secondary_label Output]

command not found: nodemon

				
			

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

На этом процесс установки nodemon завершен. Далее мы будем использовать nodemon с нашими проектами.

Шаг 2 — Настройка образца проекта Example Express с помощью nodemon

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

				
					
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<^>

				
			

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

				
					
[secondary_label Output]

[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}!.

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

				
					
[secondary_label Output]

[nodemon] restarting due to changes...

[nodemon] starting `node server.js`

&lt;^&gt;Shark&lt;^&gt; app listening on port 3000!

				
			

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

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

				
					
[label package.json]

{

  // ...

  &lt;^&gt;"main":&lt;^&gt; "server.js",

  // ...

}

				
			

Или скрипт start:

				
					
[label package.json]

{

  // ...

  &lt;^&gt;"scripts":&lt;^&gt; {

    &lt;^&gt;"start":&lt;^&gt; "node server.js"

  },

  // ...

}

				
			

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

Шаг 3 — Использование опций

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

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

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

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

				
					
nodemon --help

				
			

Используя эти опции, создадим команду для соответствия следующему сценарию:

  • наблюдение за каталогом server
  • указание файлов с расширением .ts
  • игнорирование файлов с суффиксом .test.ts
  • выполнение файла (server/server.ts) с ts-node
  • ожидание перезапуска в течение трех секунд после изменения файла
				
					
nodemon --watch &lt;^&gt;server&lt;^&gt; --ext &lt;^&gt;ts&lt;^&gt; --exec &lt;^&gt;ts-node&lt;^&gt; --ignore &lt;^&gt;'*.test.ts'&lt;^&gt; --delay &lt;^&gt;3&lt;^&gt; &lt;^&gt;server/server.ts&lt;^&gt;

				
			

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

Шаг 4 — Использование конфигураций

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

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

				
					
[label nodemon.json]

{

  "watch": ["server"],

  "ext": "ts",

  "ignore": ["*.test.ts"],

  "delay": "3",

  "execMap": {

    "ts": "ts-node"

  }

}

				
			

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

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

				
					
[label package.json]

{

  "name": "test-nodemon",

  "version": "1.0.0",

  "description": "",

  &lt;^&gt;"nodemonConfig":&lt;^&gt; {

    "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 для просмотра изменений.

Дополнительную информацию о доступных характеристиках и ошибках при диагностике и устранении неисправностей можно найти в официальной документации.

Если вы хотите узнать больше о Node.js, на странице темы Node.js вы найдете упражнения и проекты программирования.