Google Closure从两个独立的主机加载

时间:2015-10-12 14:15:02

标签: google-closure

我有一个网站(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中加载的依赖项是相对引用(例如../ ..),而closure尝试从www.myhost.com加载它们

有没有办法从两个不同的主机加载闭包对象?

2 个答案:

答案 0 :(得分:0)

这不是设计中考虑的场景。我认为加载的deps需要支持绝对URL。但是,一种解决方案是使用普通脚本标记预加载依赖项。如果已经满足“goog.require”,则无需从deps.js文件中解析该位置。

答案 1 :(得分:0)

这是解决问题的代码。基本上,Closure使用全局变量goog.basePath来加载deps。将其更改为其他服务器会导致从正确的位置加载deps。由于在两个服务器之间正确使用了命名空间,我们的全局对象已正确创建,并且未找到重复项。

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

向Google Closure团队提出的建议是允许goog.require的可选参数是basePath,从而消除了对此hack的需求。