2

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

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

goog.exportSymbol('Helloworld', Helloworld);

第二步:我用闭包编译器编译了上面的javascript文件:</p>

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

可以看到test_out.js的内容:</p>

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 文件有什么问题?如果有人可以提供帮助,我将不胜感激。google 关闭的文档和教程不是很简单。

4

2 回答 2

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来解决依赖关系。

于 2013-12-11T14:57:58.770 回答
0

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

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

<script>
    var Helloworld = goog.getObjectByName('Helloworld');
    var v = new Helloworld();
</script>
于 2013-11-13T10:47:41.250 回答