Javascript app作为具有外部依赖性的AMD模块

时间:2012-07-27 16:23:54

标签: javascript jquery requirejs js-amd curljs

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

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

有可能吗?我是否可以以可互操作的方式进行,以便托管站点可以使用例如要么是requirejs,curl还是Dojo AMD loader?

例如,有了这个:

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特有的。

1 个答案:

答案 0 :(得分:0)

在做了一些研究之后,我认为目前这是不可行的。至少在一件事情上 - 模块ID在AMD上下文中是全局的,所以我不能简单地在我的应用程序中使用“jquery”或“jquery-ui”模块ID,并确保当有人托管我的应用程序时不会有任何冲突并希望通过AMD使用jQuery(可能是其他版本)。请参阅示例here

  

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

据我所知,AMD的目标是在您自己的应用程序中模块化。它没有太多支持与第三方应用程序的集成,至少当你想要进行一些封装以避免冲突时不会这样做。