如何使用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 scripts 或 npx 中使用它。
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.json
或 package.json
进行更改后,您可以使用所需的脚本启动 nodemon
:
nodemon server/server.ts
nodemon
将获取配置并使用它们。 这样,您的配置可以保存、共享和重复,以避免在命令行中复制和粘贴或键入错误。
结论
在本文中,您探索了如何在您的 Node.js 应用程序中使用 nodemon
。 该工具有助于自动化停止和启动节点服务器以查看更改的过程。
有关可用功能和故障排除的更多信息,请参阅官方文档。
如果您想了解有关 Node.js 的更多信息,请查看 我们的 Node.js 主题页面 以获取练习和编程项目。