如何在文件更改时重新启动节点服务器
我正在开发一个节点/快递应用程序
$> ./node_modules/babel/bin/babel-node.js index.js
现在我想重新加载应用程序,如果我改变index.js
或任何其他依赖项。 我怎样才能做到这一点。 我想我必须使用这个gulp
,但仍然我想有一些build议如何做到这一点(哪些模块使用ect)
更新:我刚刚与supervisor
进行了testing,但当更改时,出现以下错误:
$> /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
process.on('exit', () => { server.close(); }) process.on('uncaughtException', () => { server.close(); }) process.on('SIGTERM', () => { server.close(); })
但是,现在看来重新启动,但新的代码没有加载
用这个:
supervisor -- -r 'babel/register' index.js
并删除server.close
代码。
我对所有在nodemon
(或supervisor
)中运行babel-node
的解决scheme的性能感到非常失望。 所以我build立了这个:
https://github.com/kmagiera/babel-watch
你可以像下面这样使用它(也许在你的package.json
脚本部分):
babel-watch -w src src/main.js
不同之处在于,在每个文件更改(需要1.5 MB的MBP)上重新启动整个babel-node
进程,而不是在父进程中运行babel
,并在脚本启动时提供所有传输的JS文件启动“纯” node
进程。
使用nodemon :
全球安装:
npm install -g nodemon
在你的项目中使用它:
nodemon myscript.js
它会监视项目目录中的更改,并在看到它们时重新启动脚本。
有很多工具可以做到这一点。 看看这篇文章: 更改文件时重新启动节点
Maby最常见的是主pipe: https : //github.com/petruisfan/node-supervisor
为此目的最stream行的工具是nodemon , 永远和主pipe 。 你可以通过npm来安装它们。 对于像CSS预处理器,缩小,testing运行等其他任务您可以使用任务pipe理器,如Grunt或Gulp
使用这个supervisor -- -r 'babel-register' index.js
因为Error: Cannot find module 'babel/register'.
检查模块后,我认为它变成了babel-register
,它适用于我