jQuery是一个 AMD 模块。不仅如此,它还是一个命名为AMD 的模块,这使得在同一页面上使用 2 个版本的 jQuery 变得非常困难。(见http://dvdotsenko.blogspot.com/2011/12/amd-modules-with-named-defines-so-much.html)
但是,在您的情况下,您不需要 2 个不同版本的 jQuery。您只需要在 AMD 之外使用 jQuery,然后在 AMD 代码树中使用。
您的解决方案非常简单:在加载 jQuery 之前加载require.js。(翻译:将加载RequireJS的脚本标签放在加载jQuery的脚本标签之前。
<script src="require.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
/* Section A - Some code that uses gloabl jQuery */
</script>
<script>
// start the AMD code tree
require(['main'],function(main){
// run code that main module returns.
// Don't know what that may mean in your case.
// example:
main()
})
</script>
那里会发生什么:
- requirejs 加载并设置全局
require
和define
对象
- jQuery 加载并且它 (a) 总是设置全局 window.jQuery (+ window.$) 和 (b) 如果
define
存在并且它是 AMD 品种,它将自己定义为具有特定名称的命名模块 - “jquery”< - 正是如此。
- 您的代码依赖于全局 jQuery 运行。
- 您的代码取决于 AMD 注册的 jQuery 运行。
3 和 4 使用一个完全相同的 jQuery 实例。
您绝对必须要求 jQuery 作为“jquery” 没有其他字符串会给您一个 jQuery 实例。
给 jQuery 取别名的唯一方法是创建一个单独的命名定义,重新打包已经定义的“jquery”模块:
define(
'my_jquery_yey'
, ['jquery']
, function($){return $}
)