我们正在尝试将我们项目的包装从dojo切换到谷歌关闭,但到目前为止我们还没有运气.这是一个简单的例子,说明了我们要完成的任务:
然后/foo/bar.js
我有:
goog.provide("foo.bar"); foo.bar.echo = function(s) {console.debug(s);}
我在firebug中收到的错误如下:
goog.require could not find: foo.bar foo is not defined
当我查看Net选项卡时,没有一个http请求来获取文件 - 我希望闭包库生成一个脚本标记来获取bar.js
.
救命!;)
我想通了,这不是很难,但有一些问题.
基本上,您可以使用以下几种模式之一使用依赖关系生成脚本calcdeps.py(您应该阅读calcdeps.py文档):
生成deps.js文件
将所有内容连接到一个文件中,可选择使用闭包编译器对其进行编译.
对于开发,您应该使用(1),因为它允许您在编辑JS源之后不运行calcdeps.py,除非您对依赖关系树进行了更改.其余的答案是这样的,我还没有尝试过另一个.
以下是我为生成它所做的事情:
#!/bin/bash cd closure-library/closure/goog python ../bin/calcdeps.py -p ../../../js -o deps > ../../../my-deps.js
...假设以下目录结构:
project/ closure-library/ (as checked out from SVN) js/ (my JS code) app.html
(该-p
参数遍历指定目录中的所有js文件,文档表示如果必须,可以指定要搜索的多个目录.)
上面的调用在主app.html旁边创建了一个my-deps.js文件,我用它来运行应用程序.创建的文件包含有关我的JS文件的信息js/
,如下所示:
goog.addDependency('../../../js/controllers.js', ['proj.controllers'], []); goog.addDependency('../../../js/ui.js', ['proj.ui'], ['proj.controllers']);
- 第一个字符串,它是我的JS文件的路径相对于closure-library/closure/goog/base.js(这很重要!),第二个数组是goog.provide
-d字符串的列表,最后一个数组是列表的goog.require
-d字符串.
现在在app.html我有:
注意:
除了包含closure的base.js之外,我还包括我生成的deps.js
正如本教程中所提到的,goog.require
调用必须位于单独的脚本标记中,因为它附加了一个脚本标记来加载所需的脚本,并在当前脚本标记完成处理后加载它们.
陷阱:
路径相对于base.js的上述问题.goog.require
通过将base.js基本URL(即没有base.js leafname)和第一个参数连接到deps.js中的goog.addDependency来创建要加载的脚本URL.
calcdeps.py在Windows上运行不正常,特别是使用deps.js字符串文字中的反斜杠
如果某些内容不能正常工作,您可能需要查看提及calcdeps的所有问题并确保您拥有最新的结帐.
更新!
新版本的calcdeps.py稍微改变了游戏规则.要创建deps.js,您现在需要使用-d标志.例如:
python path-to-closure-library/closure/bin/calcdeps.py -i path-to-your-src/requirements.js -o deps -d path-to-closure-library/closure/ -p path-to-your-src/ --output_file=path-to-your-src/deps.js
编译:
python path-to-closure-library/closure/bin/calcdeps.py -i path-to-your-src/requirements.js -d path-to-closure-library/closure/ -p ./ --output_file=path-to-your-release/scripts.min.js -c path-to-compiler/compiler.jar -f "--compilation_level=ADVANCED_OPTIMIZATIONS" -f "--debug=true" -f "--process_closure_primitives=true" -f "--manage_closure_dependencies=true" -o compiled
所以这个过程实际上现在变得容易多了,但是你必须利用你的ESP的力量来发现它完全没有文档.calcdeps.py现在也无法在Windows上使用Python 3.1,因此这也是很有趣的.一些黑客让它为我工作(我不会放在这里,因为我不是一个python程序员,必须有更好的方法来做到这一点).
一般来说,最后一天一直非常有趣,希望这篇文章可以帮助别人避免同样的享受.
圭多