更改文件后重新启动节点


172

对于那些来自PHP背景的人来说,杀死节点并在每次代码更改后重新启动它的过程似乎非常繁琐。使用节点启动脚本以保存代码更改后自动重新启动节点时,是否有任何标志?

Answers:


94

forever模块具有多个node.js服务器的概念,并且可以启动,重新启动,停止和列出当前正在运行的服务器。它还可以监视文件更改并根据需要重新启动节点。

如果尚未安装,请安装:

npm install forever -g

安装后,调用forever命令:使用该-w标志监视文件的更改:

forever -w ./my-script.js

此外,您可以监视目录并忽略模式:

forever --watch --watchDirectory ./path/to/dir --watchIgnore *.log ./start/file

永远+1既适用于开发/测试,也适用于生产。
smertrios

1
我尝试使用此命令永久性地重新启动我的ES2015 Expess.js / Webpack服务器,forever -c babel-node -w --watchDirectory ./server ./server/index.js 但可悲的是它似乎永久发送到尾旋中, 并且它频繁地重新启动服务器,导致端口已在使用中错误...某种程度上,重新启动后添加暂停?
Brian Di Palma 2015年

1
@BrianDiPalma如果在watch目录下有任何更改的文件(例如日志),则可能应该添加一些忽略模式。检查文档以查看是否可以定义两次重启之间的延迟。
海德

1
@hyde这不是必需的延迟,而是必需的-tor killTree选项,我想babel-node被杀死了,但它没有生成Express服务器。
布赖恩·迪·帕尔马

2
Forever JS在Windows中有一个Bug,该脚本在终止时不会杀死Node进程。必须手动杀死节点进程:( stackoverflow.com/questions/14556852/…–
pmont

157

一个不错的选择是Node-supervisor,Node.js的“在文件更改时重新启动”则是有关如何使用它的好文章,通常是:

 npm install supervisor -g

迁移到应用程序的根目录后,请使用以下命令

 supervisor app.js

无论出于何种原因,这里也是一样,就像我之前使用nodemon一样,没有任何问题。
ZenMaster 2014年

1
也为我工作。我必须覆盖默认的通配符监视参数,server.js因为它一直在重新启动,这是由于我的服务器在引导时构建了客户端,因此更改了文件。supervisor --watch server.js server.js解决了。
scipilot 2015年

2
不再维护节点主管。
aleung 2015年

奇迹般有效!!
JRichardsz '16

我最喜欢的一个,刷新间隔几乎可以立即检查文件是否被修改!
NiCk Newman

100

您应该看一下nodemon之类的东西

Nodemon将监视启动nodemon的目录中的文件,如果它们发生更改,它将自动重新启动您的节点应用程序。

例:

nodemon ./server.js localhost 8080

或简单地

nodemon server

知道为什么Node需要重新启动以实现代码更改吗?为什么其他服务器(例如Apache / PHP)不需要重启?
特立独行

2
@ dk49,因为在这种情况下,PHP脚本针对每个传入请求启动,并在完成页面生成后停止。
Daerdemandt

@Daerdemandt感谢您的分享。.但是我仍然不明白为什么服务器(在任何平台上)都需要启动和停止?是因为它维护文件(响应)的缓存吗?我认为服务器将在请求时从磁盘加载文件,对其进行处理,然后发送响应。我是服务器端编程的新手。
特立独行

您可以/应该在生产环境中使用nodemon吗?
JoeTidee

1
不确定nodemon仍然如何保持今天(就像回到2012年一样),但是出于安全原因,我不确定是否只要文件更改,我的服务器就会在prod上重启。像pm2之类的东西可能更适合生产环境。
Menztrual

43

提供了各种NPM软件包以简化此任务。

为了发展

对于生产(具有扩展功能,例如集群,远程部署等)

可以在StrongLoop的网站上找到Forever,pm2和StrongLoop之间的比较。


3
@ 2019 nodemon似乎仍然是四个开发选项中唯一的一个。
mvermand

1
@mvermand是的,除了nodemon以外,其中任何一个都没有发布新版本。对于生产,PM2仍保持良好状态。


9

节点开发

对于希望在服务器重新启动或文件中出现错误更改时在桌面上发出咆哮(或libnotify)通知的开发人员,node-dev是nodemon和超级用户的绝佳选择。

安装:

npm install -g node-dev

使用node-dev,而不是node:

node-dev app.js

更改文件的通知,以便服务器自动启动

在此处输入图片说明

控制台输出

在此处输入图片说明


3

我使用runjs像:

runjs example.js

这个包叫做 run

npm install -g run

2
这不是更好,只是另一个选择
sp2danny 2015年

如果它解释为什么使用run,以及与现有替代方法的比较,则该答案将更有价值。仅仅抛弃另一个选择只会助长选择的悖论。(幸运的是,run自2015年以来未进行任何更新,因此现在没有太多选择了。)
Dan Dascalescu

0

按照步骤:

  1. npm install --save-dev nodemon

  2. 将以下两行添加到package.json的“脚本”部分:

"start": "node ./bin/www",
"devstart": "nodemon ./bin/www"

如下所示:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ./bin/www",
    "devstart": "nodemon ./bin/www"
}
  1. npm run devstart

https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Express_Nodejs/skeleton_website


好吧,它的答案与2012年的答案基本相同,但其周围带有更多“魔术”。但是答案的实质是“使用nodemon”。重置是切向的。它的格式不正确,但我看到David修复了该错误,因此我将撤消我的下票。
Dan Dascalescu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.