【问题标题】:Nodejs require returns same old file when requiring a second time after the file changed文件更改后第二次需要时,Nodejs 需要返回相同的旧文件
【发布时间】:2012-10-18 00:26:21
【问题描述】:

所以在我的 nodejs 服务器文件中,我有一行:

tools=require("./tools.js");

工具文件包含我更改很多的功能等,所以我想不是每次更改时都重新启动服务器,我可以简单地添加一些方法让我重新需要 tools.js,所以我做到了。但是现在的问题是,当我启动程序时,更改 tools.js 并使其重新需要它,它再次需要它,就好像它仍处于第一次需要时的状态一样。什么?

编辑:我不想在文件更改时重新启动应用程序,因为这与重新启动服务器相同,这是我想要阻止的!所以我需要一些让我重新需要它的东西,忽略模块缓存或其他什么。

有什么想法可以帮助我吗?

【问题讨论】:

    标签: javascript node.js require


    【解决方案1】:

    如果您不想在每次需要时重新启动应用程序。

    var path = require('path');
    var filename = path.resolve('./tools.js');
    delete require.cache[filename];
    var tools = require('./tools');
    

    【讨论】:

    • 给我错误路径未定义。它在哪个模块中?
    • 找到了,在路径模块里。 path=require("path");
    【解决方案2】:

    这为我解决了:

    let tools = require("./tools.js"); 
    delete require.cache[require.resolve("./tools.js")];
    tools = require("./tools.js");
    

    感谢answer

    【讨论】:

      【解决方案3】:

      如果我对您的理解正确,您将遇到 Node 的模块缓存。 http://nodejs.org/docs/latest/api/modules.html#modules_caching

      如果可以的话,您可能想为 Node 寻找合适的重新加载器。例如,请参阅https://github.com/isaacs/node-supervisor

      【讨论】:

        【解决方案4】:

        看看主管。 Supervisor 可以在文件更改时自动重启应用程序,并且设置简单。

        npm install -g supervisor

        supervisor app.js

        【讨论】:

          【解决方案5】:

          一旦 node.js require() 一个模块,任何对 require() 的后续调用都会从内存中获取它,实际的模块文件不会再次加载。您需要做的是使用像 nodemon (https://github.com/remy/nodemon) 这样的工具,它会在文件更改时自动重启您的应用程序。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-26
            相关资源
            最近更新 更多