2015-10-12 33 views
0

我有一個網站(www.myhost.com),它使用Google Closure未編譯(模塊通過deps.js加載)。谷歌關閉從兩個單獨的主機加載

我想從其他主機導入另一個Google Closure應用程序。 (例如www.otherhost.com)。

爲了做到這一點,我使用的腳本代碼中的其他主機加載DEPS文件:

<script src="<http://www.otherhost.com/libraries/deps.js" type="text/javascript"></script> 

的deps.js裝就好了。繼該行我有這個goog.require聲明:

goog.require('MyObject'); 

對象未正確加載,因爲在加載deps.js的依賴關係是相對引用(例如../ ..)和關閉試圖加載它們從www.myhost.com

有沒有辦法從兩個不同的主機加載閉包對象?

回答

0

下面是解決問題的代碼。基本上,Closure使用全局變量goog.basePath加載代碼。將其更改爲其他服務器導致代碼從正確的位置加載。由於正確使用兩臺服務器之間的命名空間,我們的全局對象被正確創建並且沒有找到重複項。

var savedBasedPath = goog.basePath; 
    goog.basePath = 'http://www.otherhost.com/libraries/closure/goog/'; 
    goog.require('MyObject'); 
    goog.basePath = savedBasedPath; 

建議向谷歌關閉隊是允許的可選參數goog.require這是基本路徑,消除了這個技巧的需要。

0

這不是設計中考慮的情況。我認爲加載的代碼需要支持絕對的URL。但是,一種解決方案是使用普通的腳本標記來預加載依賴關係。如果「goog.require」已經滿足,則不需要從deps.js文件解析位置。

+0

手動加載依賴關係(如果我理解正確的話)將會破壞編譯器輸出的deps.js工具的整體目的。 – Kesty

+0

編譯器不輸出deps.js文件。它用於「調試」加載程序,僅用於未編譯的代碼。 – John

+0

對不起,我的意思是calcdeps。你有沒有看到我的答案在下面? – Kesty