1

我正在编写一个应该托管在各种站点上的 Javascript 应用程序。应用程序本身使用 jQuery 和 jQuery UI。我知道jQuery.noConflict(true)技巧并目前正在使用它,以免污染全球空间。我的目标是始终将 jQuery 及其任何插件保留在我的应用程序本地,以免与托管站点上的任何内容发生冲突。托管站点应该可以加载自己的 jQuery(可能是不同的版本)并添加一些插件。

现在,我想将应用程序构建为 AMD 模块。我可以要求托管站点使用 AMD 加载器(require.js、curl 等),但我不想要求任何特定的加载器——只要符合 AMD API 的任何东西(是的,我知道它是还没有 100% 准备好)。

有可能吗?我能否以可互操作的方式进行操作,以便托管站点可以使用例如 requirejs、curl 或 Dojo AMD 加载程序?

例如,有了这个:

define(['jquery'], function($) {
    var myLocaljQuery = $.noConflict(true);

    ... my app module implementation here ...

});

如何指定我的应用程序要使用的 jQuery 路径?据我了解,我不能做这样的事情:

require.config({
    paths: {
       'jquery' : 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min'
    }
});

define(['require'], function(require) {
    require(['jquery'], function($) {
        var myLocaljQuery = $.noConflict(true);

        ... my app module implementation here ...
    });
});

因为第一个require是全局对象,这是特定于 requirejs 的。

4

1 回答 1

0

在做了更多的研究之后,我认为目前是不可行的。至少一方面 - 模块 ID 在 AMD 上下文中是全局的,所以我不能简单地在我的应用程序中使用“jquery”或“jquery-ui”模块 ID,并确保当有人托管我的应用程序时不会有任何冲突并且想通过 AMD 使用 jQuery(可能是其他版本)。参见例如这里

curl.js 不能防止与可能将其他版本的 jQuery 加载为 AMD 模块的第三方脚本发生冲突。

据我了解,AMD 旨在将您自己的应用程序中的东西模块化。它对与第三方应用程序的集成没有太多支持,至少在您想要进行一些封装以避免冲突时不支持。

于 2012-07-29T09:25:53.967 回答