main()和Closure编译器

时间:2014-07-29 00:10:54

标签: javascript google-closure-compiler

我通过SIMPLE_OPTIMIZATIONS通过Closure编译后运行正常的javascript。但我想执行执行死代码删除的ADVANCED_OPTIMIZATIONS

在阅读了一些相关文档here之后,我相信我的main()函数,我通过<body onload="main()">调用的函数正在被我的编译器消除。为了确认这一点,我在console.log('hello');函数中添加了main()行代码。在文本编辑器中使用简单和高级优化打开Closure编译的结果时,我可以在简单版本中找到console.log('hello');,但它在高级版本中不存在。

所以我的问题是,是否有一种优雅的方式告诉编译器main()无法访问? (或许我在做别的事情......)

2 个答案:

答案 0 :(得分:3)

使用事件侦听器绑定它,而不是在html中内联它。例如,而不是:

<强> HTML

<body onload="main()">Test</body>

<强> JS

var main = function() { /* Do something */ }

使用

新JS

var main = function() {
    console.log("Here!");
}
window.addEventListener("load", main);

然后,您可以从HTML中删除onload="main()"。这在JavaScript中也被认为是一种很好的做法。

答案 1 :(得分:0)

您还可以使用--closure_entry_point标志。无论文件中包含main,请在该文件中添加goog.provide('myapp.entrypoint')之类的内容,然后将--closure_entry_point=myapp.entrypoint传递给编译器。