我有第三方模块,加载了requirejs。在其定义中,每个模块都需要加载一些所需的库(本地模块)。
// SAMPLE MODULE
define(['require'], function(require) {
function init (args) {
require ([./somelibrary], function { /* ... */ });
}
return (initFunc: init);
}
该模块完全可以自行运行。但是如果我尝试加载多个模块,他们可以加载同一个非amd库的不同版本。让我们举个例子:
如果somelibrary
在窗口对象中设置全局名称,就像在window.somelibrary = some_library_code
中一样。如果module1加载somelibrary0.1并且module2稍后加载somelibrary0.2,则module1以somelibrary0.2结束,这是不好的。
考虑到我无法改变模块的工作方式,是否有一种“技巧”的方法需要让我创建一个不同的窗口对象?像这样:
require ([module1, module2], function (mod_1, mod_2) {
// LOAD MODULE 1
var fakeWindow1 = {}
/* do the magic */
mod_1.init ();
/* somelibrary required by module1 ends up in fakeWindow1.somelibrary */
// LOAD MODULE 2
var fakeWindow2 = {}
/* do the magic */
mod_2.init ();
/* somelibrary required by module2 ends up in fakeWindow2.somelibrary */
}
如果不可能,我该怎么做才能避免全球环境污染?
请注意我无法更改模块的代码。