2013-07-17 60 views
0

我遇到了一個問題,試圖爲組織中的另一個團隊編寫的一些JavaScript代碼創建RequireJS填充。腳本通過一個noraml HTML腳本加載,例如:RequireJS模塊嘗試加載填充模塊

<script src="MyCustomModule.js" type="text/javascript"></script> 

我main.js包含以下內容:

requirejs.config({ 
    paths: { 'text': 'durandal/amd/text' }, 
    shim: { 
     'MyCustomModule': { exports: 'My.Custom.Module' } 
    } 
}); 

我試圖訪問自定義模塊中的各種方式,但這種是我當前的代碼:

define(['MyCustomModule'], function (require, MyCustomModule) { 
... 
} 

但每次頁/應用程序加載時我得到這表明它無法加載app/MyCustomModule.js(我可以在控制檯看到404錯誤RequireJS錯誤在哪裏t試圖從服務器請求文件)。我究竟做錯了什麼?

回答

1

您還需要包括MyCustomModulepaths

requirejs.config({ 
    paths: { 
     'text': 'durandal/amd/text' 
     'MyCustomModule': 'path/to/MyCustomModule' 
    }, 
    shim: { 
     'MyCustomModule': { 
      exports: 'My.Custom.Module' 
     } 
    } 
}); 

如果你不這樣做,define(['MyCustomModule'] (...)將尋找在baseUrl位置的依賴,在你的情況:app/MyCustomModule


換句話說:shim不能「撿」不是由RequireJS加載的全局變量。

+0

是否記錄在某處,文檔位於:http://requirejs.org/docs/api.html#config-shim沒有提及有關設置路徑的任何信息(但是當我回來時我肯定會嘗試它明天上班)。 – CodingGorilla

+1

幾乎你鏈接的整個章節*類型*暗示填充只適用於RequireJS加載的依賴(*「假設[庫]已經安裝在baseUrl目錄中,否則你可能需要爲它們設置路徑配置: 「*,*」要加載屬於或使用shim配置的模塊,需要一個正常的require/define調用「*等等),但是你說得對,它似乎沒有明確提及它。這是James Burke自己提出的一個相同問題的另一種解決方案(https://groups.google.com/forum/#!msg/requirejs/CI79vnKEsWM/2Vmi38yWC_cJ – kryger

+0

)。這基本上就是我們已經做的,我希望通過實施墊片來清理大約15個這樣的文件。看起來墊片是一種「更乾淨」的方式。也許不是... – CodingGorilla