Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在运行时重新加载模块_Javascript_Node.js - Fatal编程技术网

Javascript 在运行时重新加载模块

Javascript 在运行时重新加载模块,javascript,node.js,Javascript,Node.js,我正在考虑使用Socket.IO将一个要求很高(流量很大)的基于Socket的体系结构从.NET移植到Node.JS 我当前的系统是在.NET中开发的,使用一些脚本语言,在运行时加载,因此如果需要,我可以通过向服务器发出重新加载命令来进行热修复,而无需重新启动不同的服务器/调度程序进程 我最初是这样构建的,正如我所说的,如果需要,我可以进行热修复,还可以使用透明的修复程序保持系统可用 我不熟悉Node.JS,但这正是我想要完成的: 在运行时按需加载javascript文件,将它们存储在变量中的

我正在考虑使用Socket.IO将一个要求很高(流量很大)的基于Socket的体系结构从.NET移植到Node.JS

我当前的系统是在.NET中开发的,使用一些脚本语言,在运行时加载,因此如果需要,我可以通过向服务器发出重新加载命令来进行热修复,而无需重新启动不同的服务器/调度程序进程

我最初是这样构建的,正如我所说的,如果需要,我可以进行热修复,还可以使用透明的修复程序保持系统可用

我不熟悉Node.JS,但这正是我想要完成的:

  • 在运行时按需加载javascript文件,将它们存储在变量中的某个位置,并调用脚本函数
最好的解决方案是什么?如何从运行时作为字符串加载的javascript文件中调用特定函数?我可以加载一个javascript文件,将其存储在一个变量中,并像require一样以正常方式调用函数吗


谢谢

如果我正确理解了你的问题。您可以查看该模块

或者,如果您希望能够重新加载
所需的
文件,则必须清除缓存并重新加载文件,这是可以做到的。检查代码,你会明白的

模块在第一次加载后被缓存。这意味着 (除其他事项外)每个对require(“foo”)的调用都将得到 返回的对象完全相同,如果它将解析为相同的 文件

多次调用require('foo')可能不会导致模块代码丢失 执行多次。这是一个重要特征。有了它, 可以返回“部分完成”的对象,从而允许传递 即使会导致循环,也要加载依赖项

可以找到更多信息

  • 删除缓存的模块:

    delete require.cache[require.resolve('./mymodule.js')]
    
  • 再要一次。(可能是可以调用的函数中的
    require

  • 更新

    我认识的人正在实施类似的方法。您可以找到代码。

    您可以查看我的模块,该模块允许您使所需模块无效。该模块将在进一步访问时自动重新加载

    示例:

    模块
    /myModule.js

    module.invalidable = true;
    var count = 0;
    exports.count = function() {
        return count++;
    }
    
    require('module-invalidate');
    
    var myModule = require('./myModule.js');
    
    console.log( myModule.count() ); // 0
    console.log( myModule.count() ); // 1
    
    mySystem.on('hot-reload-requested', function() {
    
        module.invalidateByPath('./myModule.js'); // or module.constructor.invalidateByExports(myModule);
        console.log( myModule.count() ); // 0
        console.log( myModule.count() ); // 1
    });
    
    主模块
    /index.js

    module.invalidable = true;
    var count = 0;
    exports.count = function() {
        return count++;
    }
    
    require('module-invalidate');
    
    var myModule = require('./myModule.js');
    
    console.log( myModule.count() ); // 0
    console.log( myModule.count() ); // 1
    
    mySystem.on('hot-reload-requested', function() {
    
        module.invalidateByPath('./myModule.js'); // or module.constructor.invalidateByExports(myModule);
        console.log( myModule.count() ); // 0
        console.log( myModule.count() ); // 1
    });
    

    对不起-我不确定我是否理解这个问题-你想做什么?您是否询问如何将
    require
    与您自己的自定义脚本一起使用?因为你问的是如何将导入的脚本重新加载到主脚本?实际上,我想在运行时加载外部javascript文件,能够修改这些文件及其函数并重新加载它们,而无需终止并重新启动Node.JS进程。请不要对多个问题给出相同的答案。发布一个好的答案,然后投票/标记以重复结束其他问题。如果问题不是重复的,请根据问题定制您的答案。