Lig*_*ard 16 javascript dojo google-closure google-closure-library
我们正在尝试将我们项目的包装从dojo切换到谷歌关闭,但到目前为止我们还没有运气.这是一个简单的例子,说明了我们要完成的任务:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="runtime/src/core/lib/goog-rev26/base.js"></script>
<script>
goog.require("foo.bar");
function main() {foo.bar.echo("hello world")}
</script>
</head>
<body onload="main()">
</body>
</html>
然后/foo/bar.js
我有:
goog.provide("foo.bar");
foo.bar.echo = function(s) {console.debug(s);}
Run Code Online (Sandbox Code Playgroud)
我在firebug中收到的错误如下:
goog.require could not find: foo.bar foo is not defined
当我查看Net选项卡时,没有一个http请求来获取文件 - 我希望闭包库生成一个脚本标记来获取bar.js
.
救命!;)
Nic*_*lay 13
我想通了,这不是很难,但有一些问题.
基本上,您可以使用以下几种模式之一使用依赖关系生成脚本calcdeps.py(您应该阅读calcdeps.py文档):
对于开发,您应该使用(1),因为它允许您在编辑JS源之后不运行calcdeps.py,除非您对依赖关系树进行了更改.其余的答案是这样的,我还没有尝试过另一个.
以下是我为生成它所做的事情:
#!/bin/bash
cd closure-library/closure/goog
python ../bin/calcdeps.py -p ../../../js -o deps > ../../../my-deps.js
Run Code Online (Sandbox Code Playgroud)
...假设以下目录结构:
project/
closure-library/ (as checked out from SVN)
js/ (my JS code)
app.html
Run Code Online (Sandbox Code Playgroud)
(该-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']);
Run Code Online (Sandbox Code Playgroud)
- 第一个字符串,它是我的JS文件的路径相对于closure-library/closure/goog/base.js(这很重要!),第二个数组是goog.provide
-d字符串的列表,最后一个数组是列表的goog.require
-d字符串.
现在在app.html我有:
<script src="closure-library/closure/goog/base.js"></script>
<script src="my-deps.js"></script>
<script>
goog.require("proj.ui");
</script>
<script>
// here we can use the required objects
</script>
Run Code Online (Sandbox Code Playgroud)
注意:
goog.require
调用必须位于单独的脚本标记中,因为它附加了一个脚本标记来加载所需的脚本,并在当前脚本标记完成处理后加载它们.陷阱:
goog.require
通过将base.js基本URL(即没有base.js leafname)和第一个参数连接到deps.js中的goog.addDependency来创建要加载的脚本URL.更新!
新版本的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
Run Code Online (Sandbox Code Playgroud)
编译:
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
Run Code Online (Sandbox Code Playgroud)
所以这个过程实际上现在变得容易多了,但是你必须利用你的ESP的力量来发现它完全没有文档.calcdeps.py现在也无法在Windows上使用Python 3.1,因此这也是很有趣的.一些黑客让它为我工作(我不会放在这里,因为我不是一个python程序员,必须有更好的方法来做到这一点).
一般来说,最后一天一直非常有趣,希望这篇文章可以帮助别人避免同样的享受.
圭多
归档时间: |
|
查看次数: |
9360 次 |
最近记录: |