包装JavaScript库以允许多个版本无冲突

包装JavaScript库以允许多个版本无冲突,javascript,Javascript,背景 目前,我们使用jQuery在运行时将第三方JavaScript库动态添加到主index.html文件中(这非常简单,但应该有助于理解)。添加后,浏览器将处理下载 我想知道是否有一种方法可以通过一些JavaScript库(或自行开发的方法)来动态地模块化或包装第三方JavaScript库,以便可以加载同一个库的两个版本而不发生冲突,并且可以独立引用 例如: “underline.js”的版本可以引用为: versionA._.noop() versionB._.noop() “under

背景

目前,我们使用jQuery在运行时将第三方JavaScript库动态添加到主index.html文件中(这非常简单,但应该有助于理解)。添加后,浏览器将处理下载

我想知道是否有一种方法可以通过一些JavaScript库(或自行开发的方法)来动态地模块化或包装第三方JavaScript库,以便可以加载同一个库的两个版本而不发生冲突,并且可以独立引用

例如:

“underline.js”的版本可以引用为:

versionA._.noop()
versionB._.noop()
“underline.js”的版本B可以引用为:

versionA._.noop()
versionB._.noop()

因此,允许“underline.js”的两个版本都可用,但不会相互冲突?

第一个问题是,为什么在同一页面上需要同一库的两个不同版本?这是一个很好的问题。我们的容器SPA允许不同的团队构建他们自己的“应用程序”,我们呈现它们。每个应用程序都可以包含所需的任何JS库。例如,如果加载了两个应用程序,并且每个应用程序都包含下划线,那么我们希望允许这样做,但要采用模块化、范围化的方式。呃,在这种情况下,我认为您无法获得通用的“JavaScript”解决方案。我只需要在IFrame或其他东西中运行每个sanboxed,这样它们就不会相互干扰。您如何将每个应用程序加载到包装器spa中?确保每个应用程序的代码都封装在一个闭包中,这将确保它们不会相互冲突。但是,您需要注意任何在窗口对象上添加自身作为属性的库。第一个问题是,为什么在同一页面上需要同一库的两个不同版本?这是一个很好的问题。我们的容器SPA允许不同的团队构建他们自己的“应用程序”,我们呈现它们。每个应用程序都可以包含所需的任何JS库。例如,如果加载了两个应用程序,并且每个应用程序都包含下划线,那么我们希望允许这样做,但要采用模块化、范围化的方式。呃,在这种情况下,我认为您无法获得通用的“JavaScript”解决方案。我只需要在IFrame或其他东西中运行每个sanboxed,这样它们就不会相互干扰。您如何将每个应用程序加载到包装器spa中?确保每个应用程序的代码都封装在一个闭包中,这将确保它们不会相互冲突。不过,您需要注意任何将自身添加为窗口对象属性的库。