的網站RequireJS documents的方法來配置的jQuery與noConflict
加載。此方法允許您像通常那樣要求jQuery爲"jquery"
,即使您沒有使用noConflict
也是如此。該配置如下(報價直接從DOC):
require.config({
// Add this map config in addition to any baseUrl or
// paths config you may already have in the project.
map: {
// '*' means all modules will get 'jquery-private'
// for their 'jquery' dependency.
'*': { 'jquery': 'jquery-private' },
// 'jquery-private' wants the real jQuery module
// though. If this line was not here, there would
// be an unresolvable cyclic dependency.
'jquery-private': { 'jquery': 'jquery' }
}
});
而且jquery-private
模塊如下(也由DOC直引號):
// and the 'jquery-private' module, in the
// jquery-private.js file:
define(['jquery'], function (jq) {
return jq.noConflict(true);
});
加載這種方式,版本你要求RequireJS加載的jQuery不應該打亂任何其他的jQuery版本。但是,存在一個重要問題:RequireJS加載的任何東西以及需要訪問由RequireJS加載的jQuery版本的東西都必須是AMD模塊(即,它必須使用define
並且在其依賴關係中使用"jquery"
列出)。否則,它將使用在RequireJS之前加載的jQuery版本。而只有一個版本的jQuery被加載時,你可以在RequireJS的配置中使用shim
來獲得這樣的軟件加載,如果你使用上面的方法,一個填充將不會在這裏剪切它。
這line骨幹,例如,是有問題的:
Backbone.$ = root.jQuery || root.Zepto || root.ender || root.$;
所以你不得不修改骨幹把自己定義爲一個AMD模塊或找到一個版本,已經有人打包。 (像一個here。)
優秀。這完全幫助我瞭解如何解決我的問題。我拿出我的jQuery Shim,用無衝突映射的方法將它加載到我的模塊中,現在我得到了一個不同於我的舊版jQuery的版本。大。謝謝您的幫助。 –
就這樣我理解 - 如果要在js中加載一個修改我的無衝突jquery對象(例如twitter的bootstrap js插件)的requirejs模塊,我必須得到一個AMD版本,以便它可以引用no加載時衝突的jquery對象,是否正確?一個填充只會引用舊的jquery對象,並且新方法在我定義的模塊(骨幹視圖)中不可用,對嗎? –
是的,你的理解是正確的。 – Louis