【问题标题】:"Reloading" a file in Node.JS在 Node.JS 中“重新加载”文件
【发布时间】:2018-08-04 12:01:53
【问题描述】:

在 Node.JS 中,我试图“重新加载”一个文件。我有以下代码:

  delete require.cache[require.resolve("./pathToFile/" + restartModule)]

restartModule 是文件名,但我不确定如何使用require() 添加文件并将其定义为变量restartModule。例如,如果restartModulemyModule,我如何将myModule.js 添加到名为myModule 的变量中?或者也许有一种更简单的方法可以简单地“重新加载”缓存中的文件?

【问题讨论】:

    标签: javascript node.js caching require reload


    【解决方案1】:

    你可以像这样简单地做一些事情:

    function reloadModule(moduleName){
        delete require.cache[require.resolve(moduleName)]
        console.log('reloadModule: Reloading ' + moduleName + "...");
        return require(moduleName)
    }
    
    var restartModule= reloadModule('./restartModule.js');
    

    但是,每次您想重新加载源代码时都必须调用 reloadModule。您可以通过如下包装来简化:

    var getRestartModule = function() {
        return reloadModule('./restartModule.js');
    } 
    
    getRestartModule().doStuff();
    

    或者

    var reloadModules = function() {
        return {
            restartModule = reloadModule('./restartModule.js');
        };
    }
    
    var modules = reloadModules();
    modules.restartModule.doStuff();
    

    或者:

    var reloadModules = function(moduleList) {
        var result = {};
        moduleList.forEach((module) => {
            result[module.name] = reloadModule(module.path);
        });
    }
    var modules = reloadModules([{name: 'restartModule', path: './restartModule.js'}]);
    
    modules.restartModule.doStuff();
    

    您甚至可以将模块重新加载放在 setInterval 上,这样模块就会每 N 秒加载一次。

    然后总是有 nodemon:https://nodemon.io/ 这在开发中很有用,每当源文件发生更改时,它都会重新加载您的服务器。 您只需像节点一样使用它,例如

    nodemon server.js
    

    【讨论】:

    • 问题是,有了那个var test,我不知道模块的名称,它是一个变量(restartModule
    • 哦,是的,我随便取个名字就行了……例如我的模块,重启模块。
    • 是的,但它需要被restartModule 拥有的任何值调用。所以 restartModule 等于 "name" 那么 var 应该被称为 "name"
    猜你喜欢
    • 2021-05-14
    • 2020-03-05
    • 1970-01-01
    • 2012-09-10
    • 2012-08-25
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多