gpt4 book ai didi

javascript - 需要: access/list all loaded modules

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:57 24 4
gpt4 key购买 nike

我的情况是,我有以下代码:

define([
"require",
"./module1/module1",
"./module2/module2",
"./module3/module3",
// ...
// hundreds of modules here (with their path)
// ...
], function (
require,
module1,
module2,
module3,
// ...
// hundreds of modules's name here
// ...
) {
var myMod = function() {

myMap = { |
"module1": new module1(), | This is the part
"module2": new module2(), | I would like to
"module3": new module3() | optimize.
} |

return myMod;
});

在这里,对于每个加载的模块,我将其初始化并推送到 map 中。当然,上面的代码不可读,不维护,而且很糟糕。

相反,我想做如下的事情:

define([
"require",
// ...
// hundreds of modules here (with their path)
// ...
], function (
require,
// ...
// hundreds of modules's name here
// ...
) {
var myMod = function(myDict) {

myMap = {}

for (var elem in myDict) {
***myMap[elem.name] = new $corresponding-elem-referece$();*** // pseudo-code.
}


return myMod;
});

基本上,myDict字典中的每个元素都有一个name属性。根据 name 的值,我想初始化相应的模块并将结果添加到 myMap 对象中。为了做到这一点,我应该能够获得知道其名称的模块引用。我想这就是我的问题。

这对我很有用,因为这样我就不需要初始化所有模块并将它们推送到 map 中,如果我不打算使用它们 - 一种惰性加载程序。

有什么帮助或建议吗?谢谢。

最佳答案

您可以扫描参数来构建您的 map 。下面是一个设计为在 Node.js 中按原样运行的示例。代码中的注释解释了发生了什么。

var requirejs = require("requirejs");

var req = requirejs({});

function generic_module(module) {
function m() {
// Convenience so that we can distinguish instances...
this.from_module = module.id;
};

// Set an `id` property on the function we return so that we can
// match by module id rather than function name. Module.id is the
// name by which the module is known to RequireJS.
m.id = module.id;

return m;
}

requirejs.define('a', ['module'], generic_module);
requirejs.define('b', ['module'], generic_module);
requirejs.define('c', ['module'], generic_module);

requirejs.define('test', ['require', 'a', 'b', 'c'], function () {

// Create a map from module name to module value. We use the `id`
// field we set on the module's return values to be able to map by
// module id instead of function name.
var name_to_value = Object.create(null);
for (var i = 1; i < arguments.length; ++i) {
var arg = arguments[i];
name_to_value[arg.id] = arg;
}

// The myDict value should be a dictionary whose keys are module
// ids.
function myMod(myDict) {
var keys = Object.keys(myDict);

var myMap = Object.create(null);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
var value = name_to_value[key];
myMap[key] = new value();
}

return myMap;
}

return myMod;
});

req(['test'], function (test) {
console.log(test({'a': 1, 'b': 1}));
});

关于javascript - 需要: access/list all loaded modules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33412625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com