使用pm2时如何自动重新加载Node.js项目

24

我目前正在使用Express.js编程Node.js,在路由或应用程序文件中更改一行代码时,我需要输入以下命令:

pm2 reload id_project.

我该如何让pm2在文件更改时自动重新加载项目?


pm2是一个用于生产模式的工具。你可以看一下 http://nodemon.io/,它能够完全满足你的需求。 - Safari
4个回答

114
你需要使用--watch选项启动你的pm2项目:
pm2 start <script|name|id> --watch

<script|name|id>指的是:

  • script 是你想让pm2处理的脚本路径
  • name 是在"ecosystem"文件中配置的名称
  • id 是已经使用pm2运行的应用程序的标识符,可以使用pm2 list获取(请注意,这实际上需要使用restart而不是start,因此可能是最不理想的选项)

您还可以指定要忽略哪些文件/目录:

pm2 start <script> --watch --ignore-watch "node_modules"

监视和重启

或者创建一个描述您想要pm2如何处理您的项目的“生态系统”JSON文件:

{
  "name": "project_name",
  "script": "index.js",
  "watch": true,
  "ignore_watch": ["node_modules"]
}

JSON选项


在这里 pm2 start id_project --watch 中的 id_project 是什么? - test team
@testteam 我已更新答案,更新了链接并提供了更多的清晰度。 - Rogier Spieker
1
这不是“重新加载”应用程序,而是“重新启动”它。 - Stephan Bijzitter
watch 命令会增加更多的内存资源吗? - Chau Giang

7
PM2附带一个方便的开发工具,可以在文件更改时启动应用程序并重新启动它: development tool。请注意保留所有的HTML标签,不要解释,并使翻译内容易于理解。
# Start your application in development mode
# it print the logs and restart on file change too

# Two way of running your application :
pm2-dev start my-app.js

# or

pm2-dev my-app.js

4

默认情况下,pm2不会在每次更改文件时自动刷新我们的服务器。您需要使用--watch cli参数启动您的pm2项目,以告诉pm2在文件更改时进行刷新:

pm2 start id_project --watch

请查看文档以获取更多细节,或者查看@rogier-spieker给出的更详细的答案。


好的,所以...我的server.js使用`#!/usr/local/bin/nodemon",但是pm2似乎没有调用nodemon。 - Michael
抱歉,@Michael。就像我说的那样,我实际上并不使用 pm2,所以我无法提供比我已经提供的更多帮助。我只是说了我说的话,因为它听起来似乎可以解决 OP 的问题。尝试查看此线程中的其他答案。也许它们可以帮助你。 - Thatkookooguy
2
就个人而言,我认为这个帖子中的另一个答案应该被接受为正确答案。只要它是被接受的答案,我甚至无法删除这个答案。 - Thatkookooguy
@Thatkookooguy 我不想点踩,我认为Dung先生应该更改被接受的答案...尽管我不指望他会这样做,因为已经过去了将近6年。 - Quiquetas

4

pm2是一个拥有许多功能的Node进程管理器。您可以运行以下命令,在检测到目录中文件更改时自动重新启动Node应用程序。

pm2 start index.js --watch

请注意,由于pm2在后台运行,您不能仅通过ctrl+c停止正在运行的pm2进程。您必须通过传递ID或名称来停止它。

pm2 stop 0
pm2 stop index

其他两个选项如下

npx supervisor index.js
nodemon index.js

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接