有没有办法在运行时更改node.js?

时间:2012-03-15 16:38:01

标签: node.js

有没有办法在运行时更改node.js?

喜欢在javascript文件运行时对其进行编辑,然后在运行时进行相应更改。

5 个答案:

答案 0 :(得分:2)

您必须通过另一个监视脚本进行更改的文件加载文件。您可能需要一些在重新启动时在脚本中运行的设置/拆卸代码。

var fs = require('fs');
var file = 'file.js';

var script;
function loadScript() {
  if (script) {
    if (typeof script.teardown === 'function') {
      script.teardown();
    }
    delete require.cache[file];
  }

  script = require(file);
}

fs.watch(file, function(event, filename) {
  if (event !== 'change') return;
  loadScript();
});

loadScript();

fs.watch API在各个平台上并非100%一致,在某些情况下无法使用。

答案 1 :(得分:0)

不,这是不可能的。当您启动节点服务器/应用程序时,它将加载当前版本的文件。如果你在启动后进行更改,它将不会发现。您必须终止该应用并重新启动以使这些更改生效。

有些像node-dev这样的实用程序会为您执行此操作。他们监视文件系统是否有变化,并根据需要重启应用程序(以及其他一些功能,如咆哮通知)。

我更喜欢手动重启应用。这样你就可以准确地知道它正在运行什么版本,并且可以在决定再次尝试之前多次保存对文件的更改。

答案 2 :(得分:0)

您检查过Node-supervisor

答案 3 :(得分:0)

这是完全可能的。

不要在标题中要求您的模块;相反,在需要时通过呼叫加载它们。

此外,您还可以在包含新模块之前调用require.undef('./myModule')以删除现有版本。如果您想在运行时删除新行为,可以在文件系统中扫描任何新模块名称。

我已经多次使用节点实现了插件模式,这样子模块更新将包含将在运行时拾取的新插件。

享受。

答案 4 :(得分:0)

您可以使用nodemon

nodemon将监视启动nodemon的目录中的文件,如果有任何文件发生更改,nodemon将自动重启节点应用程序。

在开发过程中使用Node的完美解决方案。