关于我如何在Node.js中实现文件的自动重载有什么想法吗?我厌倦了每次更改文件时重新启动服务器。 显然,Node.js的require()函数不会重新加载文件,如果他们已经被要求,所以我需要做这样的事情:

var sys     = require('sys'), 
    http    = require('http'),
    posix   = require('posix'),
    json    = require('./json');

var script_name = '/some/path/to/app.js';
this.app = require('./app').app;

process.watchFile(script_name, function(curr, prev){
    posix.cat(script_name).addCallback(function(content){
        process.compile( content, script_name );
    });
});

http.createServer(this.app).listen( 8080 );

在app.js文件中,我有:

var file = require('./file');
this.app = function(req, res) { 
    file.serveFile( req, res, 'file.js');  
}

但这也不能工作-我在process.compile()语句中得到一个错误,说'require'没有定义。Process.compile正在计算app.js,但没有关于node.js全局变量的线索。


当前回答

加载器是我的解决方案快速加载一个目录,递归。

可以返回

{'path/to/file': 'fileContents…'} 或 {path: {to: {file: 'fileContents'}}}

它有回调函数,当文件被更改时将被调用。

它处理的情况是文件足够大,以至于watch在写入完成之前就被调用。

我已经在项目中使用它一年左右了,最近才添加了承诺。

帮我进行战斗测试!

https://github.com/danschumann/loaddir

其他回答

一个好的、最新的替代supervisor的方法是nodemon:

监视node.js应用程序中的任何更改并自动重新启动服务器-非常适合开发

在没有npx的Node版本下使用nodemon(不建议使用v8.1及以下版本):

$ npm install nodemon -g
$ nodemon app.js

或者对捆绑了npx的Node版本使用nodemon (v8.2+):

$ npm install nodemon
$ npx nodemon app.js

或者在package.json中作为一个npm脚本中的devDependency:

"scripts": {
  "start": "nodemon app.js"
},
"devDependencies": {
  "nodemon": "..."
}

加载器是我的解决方案快速加载一个目录,递归。

可以返回

{'path/to/file': 'fileContents…'} 或 {path: {to: {file: 'fileContents'}}}

它有回调函数,当文件被更改时将被调用。

它处理的情况是文件足够大,以至于watch在写入完成之前就被调用。

我已经在项目中使用它一年左右了,最近才添加了承诺。

帮我进行战斗测试!

https://github.com/danschumann/loaddir

最近(2009年)在node.js邮件列表中有一个关于这个主题的帖子。简短的回答是否定的,目前还不可能自动重载所需的文件,但一些人已经开发了添加此功能的补丁。

您可以通过Node-Supervisor进行安装

npm install supervisor

参见http://github.com/isaacs/node-supervisor

在Node.js 19中,你可以使用——watch选项监视文件更改。文件更改后,进程将自动重新启动,反映新的更改。

node --watch server.js