【问题标题】:Closure Compiler: How to separate and control compilation/minification passes?闭包编译器:如何分离和控制编译/缩小通道?
【发布时间】:2015-07-14 02:01:21
【问题描述】:

Google Closure Compiler 是一个强大的 JS 编译器和压缩器,它提供了许多优化选项,例如重命名变量、删除死代码、折叠变量声明、重写控制流结构等。

我想要的是在输入 JS 程序上单独应用这些优化中的一项或多项。例如,我可能想用短名称重命名变量,但不想删除死代码。如何实现这种详细的编译通过控制? CC的源代码是否暴露了特定的接口来做这个定制,或者我应该自己写pass(如果是,我应该如何开始?)。

命令行功能确实提供了几个控制编译的选项,但不足以满足我上面想要的。由于源代码有点复杂,而且很少能找到详细的设计文档,我真的被困在这里了。任何见解将不胜感激,谢谢:)

【问题讨论】:

    标签: javascript obfuscation compiler-optimization google-closure-compiler deobfuscation


    【解决方案1】:

    看看DefaultPassConfig。该类根据 CompilerOptions 中设置的选项列出了编译期间运行的所有通道。一些 CompilerOptions 可以从命令行控制,但我们通常尽量保持编译器相对简单易用,并且不要求用户对一堆不同的编译器标志做出决定。另外,有一些传递实际上增加代码大小,但它们这样做的方式是让稍后的传递更容易在之后减小它。

    当然,如果您只是在试验编译器或试图了解它的工作原理,您可以通过添加新标志或直接修改 DefaultPassConfig 来打开和关闭所需的任何通道。

    【讨论】:

    • 许多标志由CompilationLevel.java 控制。有时修改这些选项更容易。
    • 顺便说一句,团队中的一些成员经常检查 Stack Overflow google-closure-compiler 标签和邮件列表,因此无需在两个地方发布相同的问题。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2010-10-06
    相关资源
    最近更新 更多