如何使用谷歌闭包导出符号?

时间:2013-08-26 00:16:39

标签: javascript export google-closure-compiler google-closure

第1步:我创建了一个test.js:

var Helloworld = function()
{
console.log("Hi..");
}

goog.exportSymbol('Helloworld', Helloworld);

步骤2:我使用闭包编译器编译上面的javascript文件:

java -jar ../compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js test.js   --js_output_file test_out.js

我可以看到test_out.js的内容:

goog.a("Helloworld",function(){console.log("Hi..")});'

我不知道“goog.a”是什么意思。

第3步:我创建了一个test.html:

<html>
<head><title>Hello World</title></head>
<body>
<script src="closure-library/closure/goog/base.js"></script>
<script src="test_out.js"></script>
 <script>
    var v = new Helloworld();
  </script>
</body>
</html>

步骤4:在浏览器中加载html。

然而,找不到Helloworld符号。我的脚本编译javascript文件有什么问题?如果有人能提供帮助,我将不胜感激。谷歌关闭的文档和教程不是很简单。

2 个答案:

答案 0 :(得分:1)

Closure-library旨在与您的源代码一起编译,以充分利用死代码消除。您缺少的是编译命令中正确的库源文件:

java -jar ../compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS
    --js test.js --js closure-library/base.js
    --js_output_file test_out.js

上面的命令只包含在闭包库的base.js文件中定义的函数(包括goog.exportSymbol)。编译后,test_out.js将包含已编译的goog.exportSymbol定义。

有关闭包库的更高级用法,您需要正确使用goog.require调用并使用Closure-builder来解决依赖关系。

答案 1 :(得分:0)

在test.html中,您是否尝试过更换:

<script>
    var v = new Helloworld();
</script>

<script>
    var Helloworld = goog.getObjectByName('Helloworld');
    var v = new Helloworld();
</script>