关于我如何在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全局变量的线索。


当前回答

对于使用Vagrant和PHPStorm的人来说,文件监视器是一种更快的方法

禁用文件的即时同步,这样就可以只在保存时运行该命令,然后为*.js文件和工作目录创建一个作用域并添加此命令 SSH -c "/var/www/gadelkareem.com/forever.sh restart"

forever.sh在哪里

#!/bin/bash

cd /var/www/gadelkareem.com/ && forever $1 -l /var/www/gadelkareem.com/.tmp/log/forever.log -a app.js

其他回答

你不能使用NPM中的恶魔。 如果你正在使用Express生成器,那么你可以在你的项目文件夹中使用这个命令:

nodemon npm start

或使用调试模式

DEBUG=yourapp:* nodemon npm start

你也可以直接运行

nodemon your-app-file.js

希望这对你有所帮助。

节点开发工作得很好。NPM安装node-dev

当服务器重新加载时,它甚至会给出桌面通知,并在消息中给出成功或错误。

在命令行启动你的应用程序:

node-dev app.js

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

可以返回

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

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

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

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

帮我进行战斗测试!

https://github.com/danschumann/loaddir

const cleanCache = (moduleId) => {
    const module = require.cache[moduleId];
    if (!module) {
        return;
    }
    // 1. clean parent
    if (module.parent) {
        module.parent.children.splice(module.parent.children.indexOf(module), 1);
    }
    // 2. clean self
    require.cache[moduleId] = null;
};

这里有一个在Windows中使用的低技术方法。把它放在一个名为server .bat的批处理文件中:

@echo off

:serve
start /wait node.exe %*
goto :serve

现在,不是从cmd shell运行node app.js,而是运行serve app.js。

这将打开一个运行服务器的新shell窗口。批处理文件将阻塞(因为/wait),直到您关闭shell窗口,此时原始的cmd shell将询问“终止批处理作业(Y/N)?”如果您回答“N”,则服务器将重新启动。

每次要重新启动服务器时,关闭服务器窗口并在cmd shell中回答“N”。