Google 从两个不同的主机加载的闭包

Google Closure loaded from two separate hosts

我有一个站点 (www.myhost.com) 使用 Google 未编译的闭包(模块通过 deps.js 加载)。

我想从另一个主机导入另一个 Google 关闭应用程序。 (例如 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

加载它们

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

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

这是解决问题的代码。基本上,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 的需要。