Requirejs 避免第三方AMD模块内的全球物体污染

Requirejs 避免第三方AMD模块内的全球物体污染,requirejs,javascript,amd,js-amd,Requirejs,Javascript,Amd,Js Amd,我有第三方模块,加载了requirejs。在其定义中,每个模块调用都需要加载它所需的某些库(模块的本地库) // SAMPLE MODULE define(['require'], function(require) { function init (args) { require ([./somelibrary], function { /* ... */ }); } return (initFunc: init); } 该模块完全独立工作。但如

我有第三方模块,加载了requirejs。在其定义中,每个模块调用都需要加载它所需的某些库(模块的本地库)

// SAMPLE MODULE
define(['require'], function(require) {

    function init (args) {
        require ([./somelibrary], function { /* ... */ });
    }

    return (initFunc: init);
 }
该模块完全独立工作。但如果我尝试加载多个模块,它们可以加载同一个非amd库的不同版本。让我们举个例子:

如果
somelibrary
在窗口对象中设置全局名称,如
window.somelibrary=some\u library\u code
。如果模块1加载somelibrary0.1,模块2加载somelibrary0.2后不久,模块1将使用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 */
}
如果这不可能,我能做些什么来避免全球环境污染


请注意,我无法更改模块的代码。

嘿,开始赏金!我也想知道