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

我正在开发一个节点/快递应用程序

$> ./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/re‌​gister'. 检查模块后,我认为它变成了babel-register ,它适用于我