在运行时重新加载模块
Reload module at runtime
我正在考虑使用Socket.IO.将一个要求很高(流量很大)的基于套接字的体系结构从.NET移植到Node.JS
我目前的系统是在.NET中开发的,使用一些脚本语言,在运行时加载,因此如果需要,我可以通过向服务器发出重载命令来进行热修复,而无需重新启动不同的服务器/调度程序进程。
我最初是这样构建的,所以,正如我所说,如果需要,我可以进行热修复,并通过透明修复保持系统可用。
我是Node.JS的新手,但这正是我想要完成的:
- 在运行时按需加载javascript文件,将它们存储在某个变量中,并调用脚本函数
什么是最好的解决方案?如何从运行时加载为字符串的javascript文件中调用特定函数?我可以加载一个javascript文件,将其存储在一个变量中,并像require一样以正常方式调用函数吗?
谢谢!
如果我正确理解你的问题。您可以查看vm模块。
或者,如果你想重新加载required
文件,你必须清除缓存并重新加载文件,这是这个包可以做到的。检查代码,你就会明白了。
模块在第一次加载后被缓存。这意味着(除其他外)每个需要('o')的电话都会得到完全相同的对象返回,如果它将解析为文件
多次调用require('fo')可能不会导致模块代码执行多次。这是一个重要的特点。有了它,可以返回"部分完成"对象,从而允许传递即使依赖关系会导致循环,也要加载它们。
更多信息可以在这里找到。
-
删除缓存模块:
delete require.cache[require.resolve('./mymodule.js')]
-
再次要求(可能是您可以调用的函数中的
require
)
更新
我认识的某个人正在实施类似的方法。你可以在这里找到代码。
您可以查看我的模块无效模块,该模块允许您使所需模块无效。然后,模块将在进一步访问时自动重新加载。
示例:
模块./myModule.js
module.invalidable = true;
var count = 0;
exports.count = function() {
return count++;
}
主模块./index.js
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
});
- 使用RequireJS从数组动态加载模块
- NgRoute未加载(模块错误)
- 动态加载模块角度
- RequireJS - 动态加载模块
- 无法在 Angular JS 中加载模块
- 从视图调用异步加载模块函数
- 主干木偶:木偶.应用程序导致 Require.js 模块加载错误,“'错误:尚未为上下文加载模块名称'A
- Webpack - 在不创建别名的情况下加载模块
- Jasmine 由于 ES6 语法而未加载模块
- 角度AMD加载模块不起作用
- 带有 angularjs 和 requirejs 的延迟加载模块
- RequireJS 有时不加载模块
- Require.js甚至在IF语句中也在加载模块
- AngularJS加载模块失败
- 节点未从项目根目录加载模块
- 通过requirejs自动加载模块
- 在运行时重新加载模块
- 动态命名的局部变量,用于加载模块
- RequireJS-加载模块的多个实例
- 无法在HotTowel SPA上加载模块