2013-03-21 48 views
0

我有一個網站,使用標準的非AMD JavaScripts,它有jQuery版本「1.7.2」。我正在尋找移動到使用require.js我有一個看起來像這樣的主文件。兩個jQuery的一個RequireJS

require.config({ 
    paths: { 
     jquery: "../components/jquery/jquery.min" 
    } 
}); 

require(["jquery"], function($) { 
    console.log($().jquery;); 
}); 

我希望發生的是這種運行和日誌(1.9.1)和我能夠運行在瀏覽器console.log($().jquery;);並獲得「」 1.7.2" 。這意味着所有需要的依賴關係使用新版本但本身不會影響全局範圍我怎樣才能做到這一點

在主要的構建文件中,我可以看到jQuery被包含而不在任何函數內我期望它被嵌套在一個功能,防止它在全球範圍內。

我很好,即使做這樣的事情

require.config({ 
    paths: { 
    jquery: "../components/jquery/jquery.min" 
    }, 
    shim: { 
    jquery:{ 
     exports: "$JQ" 
    } 
    } 
}); 

define("main", ["jquery"], function($JQ) { 
    console.log($JQ().jquery); 
}); 

但它不工作...

回答

0

也許試試這個:

編輯

require.config({ 
    paths: { 
     jquery: "..components/jquery/jquery.min", 
     jquery172: "../components/jquery/jquery-1.7.2.min", 
     jquery191: "../components/jquery/jquery-1.9.1.min" 
    } 
}); 

// use jQuery 1.7.2 here 
define("main", ["jquery172"], function($JQ) { 
    console.log($JQ().jquery); 
}); 


// use jQuery 1.9.1 here 
define("some other module", ["jquery191"], function($JQ) { 
    console.log($JQ().jquery); 
}); 

// use whatevers global jQuery here 
define("some other module", ["jquery"], function($JQ) { 
    console.log($JQ().jquery); 
}); 
+0

這是有道理的,但有一個是全球的,我不想改變那呢。 – ThomasReggi 2013-03-21 21:22:53

+0

我有一個jquery的副本,它不在其中,它直接在頁面上運行。我要求有一個新版本。 require中的新版本恰好是全球性的,它在網站上打破了一些東西。我不想要求的新的jquery成爲全球... – ThomasReggi 2013-03-21 21:30:01

+0

@ThomasReggi你將不得不使用'jQuery.noConflict()'http://api.jquery.com/jQuery.noConflict/,所以它不會污染推出全球jQuery。 – sweetamylase 2013-03-21 21:31:45