如何在文件更改时重新启动节点服务器

时间:2015-08-22 12:08:29

标签: javascript node.js gulp

我正在开发节点/快递应用

println(poll.valueForKey("title"))

现在,如果我对$> ./node_modules/babel/bin/babel-node.js index.js 或任何其他依赖项进行更改,我想重新加载应用程序。我怎样才能做到这一点。我想我必须使用index.js,但我仍然希望就如何做到这一点(使用哪些模块等)提出一些建议。

更新:我刚刚使用gulp进行了测试,但是当发生变化时,我收到以下错误:

supervisor

更新:我刚试过$> /node_modules/.bin/supervisor --exec ./node_modules/babel/bin/babel-node.js index.js crashing child Starting child process with './node_modules/babel/bin/babel-node.js index.js' events.js:85 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at exports._errnoException (util.js:746:11) at Server._listen2 (net.js:1146:14) at listen (net.js:1172:10) at Server.listen (net.js:1257:5) ,但我得到与nodemon相同的错误:

supervisor

更新:我已通过将以下内容添加到$> nodemon --exec ./node_modules/babel/bin/babel-node.js index.js --watch libs ... 22 Aug 16:58:35 - [nodemon] restarting due to changes... 22 Aug 16:58:35 - [nodemon] starting `./node_modules/babel/bin/babel- node.js index.js` events.js:85 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at exports._errnoException (util.js:746:11) at Server._listen2 (net.js:1146:14) at listen (net.js:1172:10)

解决了EADDRINUSE问题
index.js

但是,现在它似乎重新启动,但新代码未加载

6 个答案:

答案 0 :(得分:6)

使用它:

supervisor -- -r 'babel/register' index.js

并删除server.close代码。

答案 1 :(得分:3)

我对babel-node(或nodemon)内运行supervisor的所有解决方案的效果感到非常失望。所以我建立了这个:

https://github.com/kmagiera/babel-watch

您可以按如下方式使用它(可能在您的package.json脚本部分中):

babel-watch -w src src/main.js

不同之处在于,不是在每次文件更改时重新启动整个babel-node进程(在我的MBP上花费1.5秒),它在父进程中运行babel并启动“纯”{{1}使用脚本启动时提供的所有已编译的JS文件进行处理。

答案 2 :(得分:2)

使用nodemon

全球安装:

npm install -g nodemon

在您的项目中使用它:

nodemon myscript.js

它将监视项目目录中的更改,并在看到脚本时重新启动脚本。

答案 3 :(得分:1)

有很多工具可以做到这一点。看看这篇文章: Restart node upon changing a file

Maby最常见的是主管: https://github.com/petruisfan/node-supervisor

答案 4 :(得分:1)

用于此目的的最常用工具是nodemonforeversupervisor。你可以通过npm安装它们。对于其他任务,如css预处理器,缩小,测试运行等。您可以使用任务管理器,如GruntGulp

答案 5 :(得分:1)

使用此supervisor -- -r 'babel-register' index.js因为Error: Cannot find module 'babel/re‌​gister'.检查了模块后,我认为它已更改为babel-register并且它适用于我