告别Node.js开发中反复重启的繁琐!本文介绍两种方法,助您提升开发效率。
核心要点
--watch
选项。此内置功能会在任何导入文件更改时重新启动应用程序,提供比nodemon更直接的替代方案,无需额外的第三方模块。但是,它缺乏nodemon中可用的高级控制选项。如果您有PHP开发经验,您知道可以随时更新代码并刷新浏览器来测试更改。像Apache或NGINX这样的Web服务器会接收您对PHP文件的请求,然后将内容传递给PHP解释器执行代码。服务器将生成的输出(通常是HTML或JSON)返回给调用浏览器。换句话说,代码在每次请求时都会动态运行。
Node.js对于Web应用程序采用不同的方法:您的JavaScript应用程序就是一个Web服务器。运行node index.js
会初始化应用程序,加载所有模块并启动一个服务器,该服务器可以响应传入的请求。更改文件不会影响应用程序的输出,因为它已经在内存中运行。要测试更新,您必须使用Ctrl | Cmd C关闭它,然后再次运行node index.js
。
在调试期间或那些难得的专注工作时间里,Node.js的停止和重启过程会变得非常令人沮丧,尤其是在进行大量更改时。幸运的是,有两种解决方案:
--watch
模式nodemon是由JavaScript专家Remy Sharp开发的第三方Node.js模块。(他说你可以随意发音!)
您可以将nodemon安装为全局模块:
<code class="language-bash">npm install -g nodemon</code>
然后在开发启动命令中用nodemon替换node。例如,考虑以下命令:
<code class="language-bash">node --inspect index.js arg1 arg2</code>
上面的命令现在将如下所示:
<code class="language-bash">nodemon --inspect index.js arg1 arg2</code>
您的应用程序将照常启动,但是当您编辑并保存源文件时,它会自动重启。无需按Ctrl | Cmd C并再次运行,尽管您可以键入rs
并按Enter强制重启。
注意:nodemon是一个服务器端解决方案,不会刷新您指向应用程序的任何浏览器选项卡。您可以使用Browsersync或esbuild等工具实现实时重新加载。
要获取nodemon帮助,请输入:
<code class="language-bash">npm install -g nodemon</code>
nodemon有自己的一组命令行参数,这些参数优先于其他地方的配置。您也可以在以下位置定义配置:
package.json
文件中的"nodemonConfig"
部分nodemon.json
配置文件,和/或nodemon --config <file></file>
时使用的全局nodemon.json
配置文件以下参数/设置常用。
nodemon监视当前工作目录中的JavaScript文件,但您可以使用命令行上的通配符显式设置特定路径:
<code class="language-bash">node --inspect index.js arg1 arg2</code>
或者您可以在nodemon.json
配置文件中执行此操作:
<code class="language-bash">nodemon --inspect index.js arg1 arg2</code>
类似地,您可以选择忽略路径:
<code class="language-bash">nodemon --help</code>
或者您可以在nodemon.json
配置文件中执行此操作:
<code class="language-bash">nodemon --watch lib1 config/*.json ./index.js</code>
您可以通过文件的扩展名来监视特定文件。例如,您可以像这样监视js、cjs、mjs、json和njk模板文件:
<code class="language-json">{ "watch": [ "lib1", "config/*.json" ] }</code>
或者您可以在nodemon.json
配置文件中执行此操作:
<code class="language-bash">nodemon --ignore lib2 config/build.json ./index.js</code>
在某些环境(例如从已挂载驱动器读取文件的Docker容器)中,文件监视可能会失败。切换到旧版监视模式使用轮询来检查文件是否已更改。从命令行:
<code class="language-json">{ "ignore": [ "lib2", "config/build.json" ] }</code>
或者在nodemon.json
配置文件中:
<code class="language-bash">nodemon --ext "js,cjs,mjs,json,njk" ./index.js</code>
nodemon在触发重启之前等待一秒钟。当您通常一次保存许多文件时,这很有用。您可以从命令行更改延迟——例如,更改为五秒钟:
<code class="language-json">{ "ext": "js,cjs,mjs,json,njk" }</code>
或者在nodemon.json
配置文件中(请注意,此配置使用毫秒而不是秒):
<code class="language-bash">nodemon --legacy-watch ./index.js</code>
显示详细的输出日志:
<code class="language-json">{ "legacyWatch": true }</code>
或者在nodemon.json
配置文件中:
<code class="language-bash">nodemon --delay 5 ./index.js</code>
设置特定环境变量的nodemon.json
配置文件:
<code class="language-json">{ "delay": 5000 }</code>
最后,您可以使用nodemon启动用其他语言编写的应用程序。例如,要启动自动重启的perl脚本:
<code class="language-bash">nodemon --verbose ./index.js</code>
您还可以在nodemon.json
配置文件中使用其扩展名定义可执行文件的列表:
<code class="language-json">{ "verbose": true }</code>
如果您需要,nodemon提供更高级的功能:
如果您有复杂的应用程序启动要求,nodemon仍然是首选工具。但是,如果您使用的是Node.js 18.11(2022年末发布)或更高版本,它提供了一个实验性的--watch
选项来重新启动您的应用程序,而无需安装nodemon或任何其他第三方模块。例如,对于启动命令:
<code class="language-bash">npm install -g nodemon</code>
这将变成:
<code class="language-bash">node --inspect index.js arg1 arg2</code>
当任何导入的文件更改时,Node.js都会重新启动。没有其他控制选项,因此如果它不适合您的项目,请考虑改用nodemon。
随着经验的增长,您会发现自动重启Node.js应用程序越来越有用。请将其视为所有项目中开发工作流程的一部分。
以上是使用nodemon并在node.js中观看实时重新启动的详细内容。更多信息请关注PHP中文网其他相关文章!