Javascript应用程序作为具有外部依赖关系的AMD模块
Javascript app as an AMD module with external dependencies
我正在编写一个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 ...
});
});
因为第一个CCD_ 2是全局对象。
经过进一步的研究,我认为目前还不可行。至少有一点——模块ID在AMD上下文中是全局的,所以我不能简单地在我的应用程序中使用"jquery"或"jquery ui"模块ID,并确保当有人托管我的应用软件并希望通过AMD使用jquery(可能是其他版本)时不会有任何冲突。参见此处的示例:
curl.js不防止与第三方脚本发生冲突,这些脚本可能会将其他版本的jQuery加载为AMD模块。
据我所知,AMD的目标是在你自己的应用程序中模块化东西。它不太支持与第三方应用程序集成,至少当你想进行一些封装以避免冲突时是不支持的。
- 单元测试依赖关系没有被嘲笑
- FRP 中 EventStreams 的循环依赖关系
- 节点模块依赖关系
- 在Meteor中使用具有依赖关系的NPM包
- requirejs定义:嵌套依赖关系
- Django管道和javascript依赖关系
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- Npm未满足对等依赖关系
- Node.JS处理重复的可传递依赖关系
- 在Firefox上使用聚合物的javascript依赖关系的HTML导入困难;Safari
- 库中的匿名定义()模块's的依赖关系导致库损坏'的家属
- 使用Require.js按照依赖关系的顺序加载JavaScript
- GraphQL代码中的Javascript循环依赖关系
- 使用 grunt 检查单个 javascript 文件时如何解决依赖关系
- 与超类的依赖关系
- 在 Angular JS 业力测试中管理依赖关系
- 在 webpack 中管理 jQuery 插件依赖关系
- requirejs+bower,bower组件中的路径和依赖关系
- 如何测试具有关系依赖关系的Ember模型的计算属性
- ReactJS:组件之间的关系(依赖关系)