這絕對是我在過去幾天遇到過的一個錯誤。加載一個模塊會導致應用程序不同部分中的第二個完全不相關的模塊在之前完美工作的位置變得未定義。我已經使用了RequireJS很多 - 這不是一個腳本加載或循環依賴問題。
domReady -calls-> new View1() -iterates-> new SubView() -depends-> text!template
-calls-> new View2() --> undefined!
這會導致其他地方完全不相關的模塊變得不確定:首先我需要在二線視圖的文本文件被重複了好幾次(1800+)時遇到的錯誤最常見。我通過將SubView功能集成到View模塊中來解決它一段時間。
domReady -calls-> new CombinedView1() -depends-> text!template
-calls-> new View2() --> ... all good ...
隨着項目的發展,我再次碰壁,真的需要找到解決的辦法。包含更多模塊會導致先前定義的模塊隨機變得不確定。要求拋出沒有錯誤,瀏覽器也不會。我沒有使用CoffeeScript或類似的東西。
我花了一些時間創建了一個我的應用程序的版本,它具有相同的模塊和依賴性結構,依賴的視圖,模型和集合被刪除。這工作得很好,所以我只能假設存在某種內存問題?但Chrome從不拋出任何錯誤。
我想我的下一步將是填充我的骨架應用程序與一些耗費內存的循環,看看會發生什麼:我會讓你知道它是怎麼回事。
使用Require v2.0.1,所以沒有訂單插件 - 依賴項和包都使用shim config指令進行配置。 非AMD模塊加載:
P.S.道歉,如果這不是在正確的地方。我認爲這會更好,但我真的不能在任何地方看到評論按鈕。
更新: 這種依賴性結構打破了一貫:
Main
- View 1
- text!...
- View 2
- text!...
替換空字符串文字每次工作正常:
Main
- View 1
- View 2
那麼,爲什麼等待加載導致文本視圖1在主模塊中顯式設置爲依賴項時變爲未定義?當然,Main不應該被調用,直到它依賴的所有東西都被加載了?
我懷疑,這的確是一個RequireJS問題,而是一些瀏覽器相關的一個。它是否在不同的瀏覽器中一致地失敗? RequireJS是否將任何問題(例如加載腳本時超時)記錄到控制檯? – Lucero
我在Chrome中看到的最多,但我也看到它也出現在Firefox中。沒有RequireJS日誌或錯誤。正在發生的錯誤是當我嘗試實例化從加載的模塊導出的Javascript函數(原型)時。這是拋出,因爲該模塊似乎沒有正確加載,因爲JavaScript不承認它是一個函數。這是錯誤實際發生的時間 - 這只是有時候。剩下的時間,代碼執行得很好。無論如何,沒有RequireJS超時錯誤。 – redhotvengeance
聽起來像加載/初始化問題的順序給我。請注意,如果您的代碼中存在循環依賴關係,則可以獲取未定義的引用,我會先查找它們。我們有一個由RequireJS加載的幾百個JS文件的項目,並且沒有任何問題(無論是在Chrome還是其他瀏覽器中)。 – Lucero