【问题标题】:Javascript app as an AMD module with external dependenciesJavascript 应用程序作为具有外部依赖项的 AMD 模块
【发布时间】:2012-07-27 16:23:54
【问题描述】:

我正在编写一个应该托管在各种站点上的 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 特有的。

【问题讨论】:

    标签: javascript jquery requirejs js-amd curljs


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      相关资源
      最近更新 更多