2015-11-03 91 views
0

我正在編寫一個使用託管的dojo api的應用程序。我正在使用AMD編寫我的應用程序的其餘部分,以便與Dojo的amd加載器很好地配合。我想使用dojo提供的一些AMD加載插件,特別是用於轉換的dojo/i18n/RequireJS Optimer忽略插件

從源代碼很好地工作,但任何時候我嘗試優化代碼,我得到「TypeError:無法讀取屬性'normalize'未定義的「。我知道它試圖加載插件並檢查normalize(),但該插件僅託管且無法下載。

我希望這個插件在優化代碼時被忽略,並且在運行時需要正確的翻譯文件。

+0

是[「空:」元路徑](http://requirejs.org/docs/optimization.html#empty)你在找什麼? – kryger

回答

1

我知道這個問題,在我的情況下,我有麻煩得到與道場/文本的工作。 爲了解決這個問題嘗試以下操作:

  1. 獲取國際化的requirejs版本在GitHub上https://github.com/requirejs/i18n/blob/master/i18n.js

  2. 它列入到您的項目。最好的辦法是將其放置在未部署的子文件夾中。在我的情況下它的./libs/build/i18n.js(不用擔心,它只用於優化,不會替換dojo/i18n)

  3. 轉到build.js(build位於./build。 JS)出發,按照項目添加到路徑:

    paths: { 
        dojo: "empty:", 
        dojox: "empty:", 
        i18n: "./libs/build/i18n" 
    } 
    
  4. 前往您有需要的索引文件(或將其添加到dojo.config),並添加新的別名:

    require({ 
        aliases:[["i18n", "dojo/i18n"]] 
    }, 
    ["..."], 
    function(...){}); 
    
  5. 用i18n!nls/strings.js替換應用程序中出現的每個dojo/i18n!nls/strings.js,這樣一來lias將被實際使用。

    define(["dojo/i18n!./nls/strings.js"], function (nls) 
    

    更換

    define(["i18n!./nls/strings.js"], function (nls) 
    

步驟後5 requirejs會認識到國際化的requirejs版本,可以實際調用正常化。但是你的應用仍然會使用dojo/i18n,因爲它隱藏在別名中。

希望這會有所幫助。

+0

謝謝,這讓我非常接近。我優化後,我仍然得到dojo/i18n的multipleDefine錯誤(一切仍然有效)。我認爲這是因爲它與主API打包在一起,添加別名會再次嘗試定義它。我通過刪除別名和切換i18n來解決這個問題!回到dojo/i18n!在我的構建過程中優化應用後。 – ssylviageo

+0

我記得我也有多個定義。但我不記得確切的解決方案。如果一切看起來正確,請檢查您的結果app.js。也許嘗試build.js =>優化:「無」並再次檢查。只要組件dojo/i18n沒有定義兩次,它應該真正的工作沒有解決方法。 (也許嘗試dojoConfig = {async:false}以及... –