编辑:试试nodules 和他们的require.reloadable() 函数。
我之前的回答是关于为什么不重新加载 Node.js 的进程,在这里并不真正适用。但我认为它仍然很重要,所以我把它放在这里。
Node.js 是事件 IO,专门用于避免多线程或进程。著名的C10k problem 询问如何同时为10,000 个客户提供服务。这是线程不能很好地工作的地方。 Node.js 可以只用一个线程服务 10,000 个客户端。如果你每次都重新启动 Node.js,你会严重削弱 Node.js。
evented IO是什么意思?
以您为例:提供页面。每次 Node.js 将要为页面提供服务时,事件循环都会调用一个回调。 事件循环是每个 Node.js 应用程序固有的,并在初始化完成后开始运行。服务器端的 Node.js 的工作方式与浏览器中的客户端 Javascript 完全一样。每当发生事件(鼠标单击、超时等)时,都会调用回调 - 事件处理程序。
在服务器端呢?我们来看一个简单的HTTP服务器(源码示例取自Node.js documentation)
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
这首先加载http模块,然后创建一个HTTP服务器,并告诉它每次HTTP请求进入时调用以function (request, response)开头的内部函数,然后让服务器监听端口8124。这几乎立即完成,所以console.log 将在之后执行。
现在 Node.js 事件循环 接管了。应用程序不会结束,而是等待请求。瞧,每个请求都会得到Hello World\n 的答复。
总而言之,不要重新启动 Node.js,而是让其事件循环决定何时必须运行您的代码。