Javascript 应用程序作为具有外部依赖项的 AMD 模块

标签 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 加载器?

例如,这样:

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

最佳答案

经过一番研究,我认为目前不可行。至少有一件事 - 模块 ID 在 AMD 上下文中是全局的,因此我不能简单地在我的应用程序中使用“jquery”或“jquery-ui”模块 ID,并确保有人托管我的应用程序时不会发生任何冲突并且也想通过 AMD 使用 jQuery(可能是其他版本)。例如,参见here :

curl.js does not prevent conflicts with third-party scripts that may load other versions of jQuery as an AMD module.

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

关于Javascript 应用程序作为具有外部依赖项的 AMD 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11691831/

相关文章:

javascript - Nightwatch JS : Browser. 执行不执行 javascript

javascript - 使用 onChange 更新组件。 React-Hooks

javascript - keyup 事件监听器中的 jQuery 单击事件监听器

javascript - 有 requirejs 在加载模块时运行回调

backbone.js - 使用Requirejs在Backbone中预编译Handlebars模板?

javascript - Asp.net WebApi Aspose.Cells - 导出和下载 Excel

javascript - 基于多个单选按钮输入使用 jquery 更新图像

jquery - 显示或隐藏网络网格的全选复选框上的按钮

javascript - 将 getJSON 与变量一起使用

ServiceWorker 中的 RequireJS