0

我们有一个系统,其中多个后端服务提供前端内容,最终组合成一个网页。

目前,我们使用 YUI3 加载器来支持 YUI 和其他 javascript 库(例如 jQuery、knout)的 javascript 和 css 依赖管理。

我想知道的是,有没有办法(使用 YUI3 的加载器或其他加载器)让这个过程对一个页面上有多个版本的库是健壮的?

例如,如果所有消费代码都将 $ 对象作为参数而不是使用全局 $,那么理论上加载程序可以在全局范围之外存储 $ 版本 1.1 和 $ 版本 1.2 的副本,并将这些对象传递给消费代码合适的。

4

1 回答 1

0

我还没有测试它,它可能需要一些微调,但这是我认为可以完成的方式。

YUI 加载器允许加载 YUI 本身的多个版本。这就是它提供通常调用的参数的原因,它在Y完成加载请求的模块时调用它调用的回调:

YUI().use('moduleA', 'moduleB', ... , function (Y) {

您可以YUI().use()多次调用,每个都将提供其自己的版本以及Y所请求的模块。

此外,您可以嵌套调用use()

YUI().use('moduleA', 'moduleB', ... , function (Y) {
     // ......
     Y.use('moduleC', function (X) {

对于第二个实例,我将其用作X回调的参数,因此您可以实际使用可用的位置和不可用的X位置。其他模块在和中都可用。或者您可以简单地关闭一个并启动一个单独的模块,每个模块都有自己的模块(参见:http: //yuilibrary.com/yui/docs/yui/yui-multi.html)。'moduleC'YXYYUI().use()

对于外部模块,请在大约 42 分钟后观看此视频。它展示了如何加载外部模块并将它们集成到那个YX任何你想要调用的模块中。在onProgress事件的回调中,加载的模块被添加到 YUI 实例中,即Y通过调用YUI.add(). Y提供给回调的参数与YUI.add()您将在回调中获得的参数相同YUI().use()

因此,需要定义外部模块,为每个模块、每个版本或其他模块赋予不同的模块名称,每个模块都指向该版本的相应路径。如果每个版本共享一个公共根路径 ,配置属性base中的配置groups(参见:http: //yuilibrary.com/yui/docs/yui/loader.html#example-config )会很方便。

我能想到的两个陷阱。首先,如果外部库将所有内容加载到全局变量中,那么当您加载第二个版本时,首先加载的内容将会有残余。如果这会产生冲突,您可能必须在对该全局对象的引用放入Y. 这应该在加载整批模块之后完成,可能在onSuccess回调中,而不是在onProgress回调中,否则您将删除后续模块的依赖关系。

第二个是有点遥远,解释太长了。由于它可能根本不会发生,让我们稍后再说。

于 2013-08-14T06:42:38.180 回答