One place for hosting & domains

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


      Введение

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

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

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

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

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

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

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

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

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

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

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

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

      • npm install nodemon --save-dev

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

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

      Output

      • command not found: nodemon

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

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

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

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

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

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

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

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

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

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

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

      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 вашего проекта:

      package.json

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

      Или скрипт start:

      package.json

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

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

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

      • наблюдение за каталогом 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.json.

      Например, здесь приведены те же конфигурации, что и в предыдущем примере командной строки, но они содержатся в файле 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:

      package.json

      {
        "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 подбирает конфигурации и использует их. Это позволяет сохранять конфигурации, делиться ими и воспроизводить их, чтобы избежать ошибок при копировании и вставке или ошибок ввода в командной строке.

      Заключение

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

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

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





      Source link