Поиск по сайту:

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


Введение

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

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

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

Предпосылки

Если вы хотите следовать этой статье, вам понадобятся:

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

Это руководство было проверено с помощью Node.js v17.1.0, npm v8.1.2, nodemon v2.0.15 и express v4.17.1.

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

Во-первых, вам необходимо установить nodemon на свой компьютер. Установите утилиту глобально или локально в вашем проекте с помощью npm или yarn:

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

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

  1. npm install nodemon --global

Или с пряжей:

  1. yarn global add nodemon

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

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

Установите nodemon локально с помощью npm:

  1. npm install nodemon --save-dev

Или с пряжей:

  1. yarn add nodemon --dev

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

  1. Output
    command not found: nodemon

Вы можете выполнить локально установленный пакет:

  1. ./node_modules/nodemon/bin/nodemon.js [your node app]

Вы также можете использовать его в npx.

На этом процесс установки nodemon завершается.

Шаг 2 — Настройка примера экспресс-проекта с помощью nodemon

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

  1. nodemon server.js

Вы можете передавать аргументы так же, как если бы вы запускали скрипт с Node:

  1. nodemon server.js 3006

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

Давайте напишем пример файла server.js, который выводит сообщение: Приложение Dolphin прослушивает порт $ {port}!.

const express = require('express')
const app = express()
const port = 3000

app.listen(port, ()=> console.log(`Dolphin app listening on port ${port}!`))

Запустите пример с nodemon:

  1. nodemon server.js

Вывод терминала будет отображать:

Output
[nodemon] 2.0.15 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node server.js` Dolphin app listening on port 3000!

Пока nodemon все еще работает, давайте внесем изменения в файл server.js. Измените вывод на другое сообщение: приложение Shark прослушивает порт $ {port}!.

Вывод терминала будет отображать:

Output
[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",
  // ...
}

Если файл main не указан, nodemon будет искать скрипт start:

{
  // ...
  "scripts": {
    "start": "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: более подробный вывод с информацией о том, какие файлы были изменены для запуска перезапуска.

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

  1. nodemon --help

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

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

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

Вывод терминала будет отображать:

Output
[nodemon] 2.0.15 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): server [nodemon] watching extensions: ts [nodemon] starting `ts-node server/server.ts`

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

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

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

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

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

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

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

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

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

  1. nodemon server/server.ts

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

Заключение

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

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

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