杏仁

2015-05-04 69 views
0

我試圖墊片的使用某些模塊,杏仁,像這樣使用墊片配置:杏仁

<script> 
requirejs.config({ 
    shim: { 
    'jQuery': { exports: 'jQuery' }, 
    //etc. 
</script> 

某些腳本將會包含在內。但是,此代碼:

require(['jQuery', function($) { 

}); 

導致「undefined missing jQuery」。如果我像這樣墊起jQuery:

define('jQuery', function() { 
    return jQuery; 
}); 

它的工作原理。

我不是建設我JS可言,只是刪除almond.js到現有的網絡軟件,這樣我就可以發展自己與AMD的新組件。我希望爲我的新模塊增加現有的全局變量。

我猜墊片只解決在構建和構建不正是我在上面做什麼,是正確的?

+1

是的,杏仁可能需要將模塊內置到一個文件中。 – Jack

+1

jquery已經是一個amd模塊,它不需要一個shim配置。但是,它將自己定義爲名稱爲「jquery」的命名模塊,全部爲小寫。 – ekuusela

回答

1

jQuery的名稱是硬編碼爲「jQuery的」。如果你偏離這一點,你會遇到麻煩。但這不是你唯一的問題。

使用shim是不一樣的調用define一個模塊名稱。當您使用shim就像你在你的問題你告訴加載器存在一個模塊名稱爲jQuery一旦模塊被加載,RequireJS應該返回作爲一個模塊值的變量jQuery的價值。強調的文本很重要:加載程序將獲取並加載名爲jQuery的模塊。

您在您的問題中顯示的define通常會與電話號碼require.config一起放置,不管是在它之前還是在它之後。這宣佈了一個名爲jQuery的模塊。因爲模塊已經有那裏有,當加載器需要獲取這個模塊時,沒有什麼可以獲取。對於杏仁來說,這是一個重要的區別。

杏仁具有restrictions,其中之一是:

優化所有的模塊到一個文件 - 沒有動態代碼加載。

(強調添加。)使用我在這個答案中使用的術語,這意味着「無法獲取」。當你使用你的define電話,你很好。當您使用shim,然後除非你優化你的模塊到一個文件,裝載機有嘗試獲取該模塊。杏仁不能做到這一點。

+0

Thx回覆Louis。我理解了RequireJS和Almond的概念。我並沒有試圖讓Almond獲取jQuery,只是不去尋找名爲「jQuery」的模塊,而是返回全局的「jQuery」對象。但它看起來像a)jQuery自己命名爲「jquery」,b)墊片已經解決了爲Almond構建。無論如何,我最終還是在這個項目上與RequireJS一起工作。當我建立時可能再次切換到杏仁。 – Chris