如何将Nodemon应用到你的Node项目

303 阅读2分钟

简介

Nodemon是一个开源的实用程序包,它可以跟踪对你的源代码所做的修改,并在有新的修改时自动重新启动你的项目服务器。

它还提供了一些独特的功能,例如能够监视一个目录而不是简单的文件,以及忽略可能存在于特定目录中的特定文件。

在本指南中,我们将看看如何将Nodemon集成到你的Node项目中,以减轻每次进行修改时重新启动项目的麻烦,并提高开发速度。

为什么是Nodemon?

传统上,当我们运行Node应用程序时,我们使用node 命令和文件名一起。

$ node app.js

这,好吧,通过加载最新的文件和它们的最新状态来运行Node应用程序,并使用它们的原样。这种状态在应用程序运行时驻留并持续存在 在内存中因此,即使你修改了源文件,也不会反映在当前运行的应用程序中。

一旦你停止应用程序,文件的原始内容就会从内存中释放出来,而且状态会丢失,直到你通过运行应用程序再次加载它。如果你改变了文件--新的状态被使用,当再次运行时,应用程序被更新。

在开发过程中,我们通常会多次启动和停止应用程序,以 "测试 "我们所写的东西是否像预期的那样工作。这些通常是小的变化,例如改变一个按钮的颜色,或者在一个特定的位置添加一个元素。很快,在开发过程中,为了一些小的改变而重新启动整个项目就会变得很烦人。

Nodemon缓解了这种烦恼,每当你在源文件中做出改变时,它就会自动重启并更新你的项目,而不需要你明确重启项目。

安装Nodemon

开始使用Nodemon的最快方法是将其安装为一个全局的npm

$ npm install -g nodemon

你也可以将Nodemon安装为一个开发依赖,只用于一个项目。

$ npm install --save-dev nodemon

开始使用Nodemon

一旦软件包安装完毕--在运行项目时,可以用它来代替node 命令。取而代之的是,你可以使用封装的nodemon 命令,当然,它就像node 一样运行应用程序,但它也会跟踪目录中的文件,并在文件被改变时触发重启。

**注意:**如果你在全局范围内安装该软件包,该命令将在全局范围内可用。如果你为一个项目安装了它,它将只在你的项目目录中可用。

假设我们有一个文件,app.js ,其中我们生成了一个随机数并显示在控制台。

let randNo = Math.floor(Math.random() * 10);
console.log(randNo);

然后我们可以用Nodemon运行这个文件。

$ nodemon app.js
[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 app.js`
6
[nodemon] clean exit - waiting for changes before restart

**注意:**如果你遇到一个错误:nodemon: command not found - 通过npx 运行它。

$ npx nodemon app.js
[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 app.js`
8
[nodemon] clean exit - waiting for changes before restart

现在,如果你要改变文件中的任何内容,并保存修改以提交给文件系统,例如在最后一行后添加一个空白--只要你保存文件,项目就会被重新启动,并显示另一个新的数字。

$ npx nodemon app.js
[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 app.js`
8
[nodemon] clean exit - waiting for changes before restart
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
6
[nodemon] clean exit - waiting for changes before restart

这里,我们得到了一些额外的信息!Nodemon正在监视具有特定扩展名的文件 -js,mjsjson 。此外,它还在监视一个特定的路径。让我们来看看如何自定义Nodemon监视的路径。

观察目录

nodemon 命令还支持一个--watch 标志,用于观察不同的目录。假设我们有一个目录,app ,我们希望Nodemon监视,我们只需在--watch 标志后提供该目录。

$ nodemon --watch app

而如果,例如,我们有多个目录,像下面的结构。

app
views
utils
public/
  index.html

我们可以给每个目录添加 --watch 标志,以包括它们。

$ nodemon --watch app --watch views --watch utils --watch public

忽略文件和目录

也可以告诉Nodemon避免观察某些文件和文件夹,如果你不希望Nodemon过早或过多地重启你的文件,特别是如果一个文件一直在以编程方式改变,比如一个日志文件,这很有用。

我们可以用--ignore 标志来做到这一点。

$ nodemon --ignore views/ --ignore public/index.js

延迟重启

虽然延迟重启不是太常见,但有些时候,你想看的文件不是即时可用的,或者一批文件正在连续更新。对于每一个变化,都会发出一个重启,使你的应用程序多次重启。

你可以通过设置--delay 标志来延迟Nodemon对一个变化的文件做出反应的时间,后面再加上一个以秒为单位的延迟。

$ nodemon --delay 5 app.js

在这里,我们在Nodemon对一个变化做出反应之前增加了5秒的延迟(等待时间)。在这5秒之间所做的任何改变将重新启动延迟计时器,并忽略之前所做的改变,只对最新的改变执行重新启动。

也可以用毫秒来指定延迟时间。

// Set delay for 10 seconds 50 milliseconds.
$ nodemon --delay 10.5 app.js

// Set delay for 2000 miliseconds.
$ nodemon --delay 2000ms app.js

结论

Nodemon允许你在对底层文件进行修改时,自动重启Node应用程序的过程。这本身并不是一个问题,但在开发过程中多次重启应用程序时,会成为一种烦恼。

它观察源目录的变化,并无缝地重新启动你的Node应用程序,并允许在这个过程中进行定制。