我有一个网站(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加载它们
有没有办法从两个不同的主机加载闭包对象?
答案 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的需求。