简介
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,mjs 和json 。此外,它还在监视一个特定的路径。让我们来看看如何自定义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应用程序,并允许在这个过程中进行定制。