动态和异步加载javascript库的多个版本

动态和异步加载javascript库的多个版本,javascript,dom,jsonp,requirejs,amd,Javascript,Dom,Jsonp,Requirejs,Amd,我有许多不同版本的javascript库可以动态加载 例如,假设我想加载foo库的多个版本。我有: foo-0.1.js foo-0.2.js Foo不是AMD兼容的库,也没有无冲突模式。这是我无法控制的第三部分图书馆。它只是沿着以下路线做一些事情: window.Foo = fooFunction; 这些库版本在插件场景中以异步和动态方式加载。加载实际上是由requirejs完成的,但这并不重要。假设函数的内容是下载并执行的 假设我们有一个需要foo-0.1的MODULE_1插件和一个需要

我有许多不同版本的javascript库可以动态加载

例如,假设我想加载foo库的多个版本。我有:

foo-0.1.js
foo-0.2.js
Foo不是AMD兼容的库,也没有无冲突模式。这是我无法控制的第三部分图书馆。它只是沿着以下路线做一些事情:

window.Foo = fooFunction;
这些库版本在插件场景中以异步和动态方式加载。加载实际上是由requirejs完成的,但这并不重要。假设函数的内容是下载并执行的

假设我们有一个需要foo-0.1的MODULE_1插件和一个需要foo-0.2的MODULE_2插件

当用户请求时(例如通过单击其名称),模块_1被初始化并加载foo-0.1。它设置用户界面(画布)并等待用户输入。window.foo对象现在指向版本0.1

然后,用户请求模块_2初始化并开始加载foo-0.2,然后设置其画布并等待用户输入。现在window.foo被覆盖并指向foo-0.2

最后,用户单击模块_1的用户界面,该界面会对情况作出反应并尝试执行某些操作。但是window.foo指向的是foo-0.2对象,它与模块_1不兼容,并且崩溃得很惨

我想要的是在一个对象中存储foo-0.1,在另一个对象中存储foo-0.2。 加载foo-0.1和foo-0.2时,是否有方法更改窗口对象

另外,我认为这不会奏效:

/* MODULE_1 */
// load foo-0.1
// when ready:
var foo-0.1 = window.foo

/* MODULE_1 */
// load foo-0.2
// when ready:
var foo-0.2 = window.foo
因为我不能确定其中一个的就绪事件将在另一个的就绪事件之前加载(我说的对吗?)


PPS:我很清楚,但除非加载的库与AMD兼容,否则它将无法工作。

你不能将foo库包装到AMD中吗?@Bergi:正如我在问题中所写,这是我无法控制的第三部分库。你怎么会认为多版本支持不能与垫片一起工作?@zeroflagL“垫片配置仅设置代码关系。要加载属于或使用shim config的模块,需要一个普通的require/define调用。单独设置垫片不会触发要加载的代码”。这意味着垫片脚本将使用require()加载,执行并正常更新window.foo。你怎么会这么想呢?我没有说什么不同的。多版本支持只是不同的配置。你可以为每个配置设置不同的垫片并加载它们。你写道你已经用require.js加载了它们。如果你想并行使用它们,你可以使用I用于将Window.Foo分配给另一个变量的垫片的nit函数(如果Window.Foo是由Foo.js设置的)