如何使用nodemon自动重启Node.js应用程序

来自菜鸟教程
跳转至:导航、​搜索

介绍

在 Node.js 中,您需要重新启动进程才能使更改生效。 这为您的工作流程增加了一个额外的步骤。 您可以通过使用 nodemon 自动重新启动进程来消除这个额外的步骤。

nodemon 是由 @rem 开发的命令行界面 (CLI) 实用程序,它封装您的 Node 应用程序、监视文件系统并自动重新启动进程。

在本文中,您将了解如何安装、设置和配置 nodemon

先决条件

如果您想继续阅读本文,您将需要:

  • Node.js 安装在本地,您可以按照【X57X】如何安装Node.js 并创建本地开发环境【X126X】进行。

本教程已使用 Node.js v17.1.0、npm v8.1.2、nodemon v2.0.15 和 express v4.17.1 进行了验证。

第 1 步 — 安装 nodemon

首先,您需要在您的机器上安装 nodemon。 使用 npm 或 yarn 在项目中全局或本地安装该实用程序:

全局安装

您可以使用 npm 全局安装 nodemon

npm install nodemon --global

或使用 yarn

yarn global add nodemon

本地安装

您也可以在本地安装 nodemon。 执行本地安装时,您可以将 nodemon 作为 开发依赖项--save-dev(或 --dev)一起安装。

使用 npm 在本地安装 nodemon

npm install nodemon --save-dev

或使用 yarn

yarn add nodemon --dev

本地安装需要注意的一件事是您将无法直接使用 nodemon 命令:

Outputcommand not found: nodemon

您可以执行本地安装的包:

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

你也可以在 npm scriptsnpx 中使用它。

nodemon 安装过程到此结束。

第 2 步 — 使用 nodemon 设置示例 Express 项目

您可以使用 nodemon 来启动 Node 脚本。 例如,如果您在 server.js 文件中有一个 Express 服务器设置,您可以启动 nodemon 并观察如下变化:

nodemon server.js

您可以像使用 Node 运行脚本一样传入参数:

nodemon server.js 3006

每次使用默认监视扩展名之一(.js.mjs.json.coffee 或 [ X134X]) 在当前目录或子目录中,进程将重新启动。

让我们编写一个输出消息的示例 server.js 文件:Dolphin app listening on port ${port}!

服务器.js

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

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

使用 nodemon 运行示例:

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 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 还将查找在项目的 package.json 文件中指定的 main 文件:

包.json

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

如果没有指定 main 文件,nodemon 将搜索 start 脚本:

包.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:更详细的输出,其中包含有关更改哪些文件以触发重新启动的信息。

您可以使用以下命令查看所有可用选项:

nodemon --help

使用这些选项,让我们创建满足以下场景的命令:

  • server目录
  • 指定带有 .ts 扩展名的文件
  • 忽略带有 .test.ts 后缀的文件
  • 使用 ts-node 执行文件 (server/server.ts)
  • 文件更改后等待三秒钟重新启动
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 文件中:

nodemon.json

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

请注意使用 execMap 而不是 --exec 开关。 execMap 允许您为某些文件扩展名指定二进制文件。

或者,如果您不想将 nodemon.json 配置文件添加到您的项目中,您可以将这些配置添加到 nodemonConfig 键下的 package.json 文件中:

包.json

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

nodemon.jsonpackage.json 进行更改后,您可以使用所需的脚本启动 nodemon

nodemon server/server.ts

nodemon 将获取配置并使用它们。 这样,您的配置可以保存、共享和重复,以避免在命令行中复制和粘贴或键入错误。

结论

在本文中,您探索了如何在您的 Node.js 应用程序中使用 nodemon。 该工具有助于自动化停止和启动节点服务器以查看更改的过程。

有关可用功能和故障排除的更多信息,请参阅官方文档

如果您想了解有关 Node.js 的更多信息,请查看 我们的 Node.js 主题页面 以获取练习和编程项目。