javascript - 闭包编译器 : How to separate and control compilation/minification passes?

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

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

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

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

最佳答案

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

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

关于javascript - 闭包编译器 : How to separate and control compilation/minification passes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396413/

相关文章:

gcc - 如何美化我编译的 FFmpeg 二进制文件?

javascript - 将命令行变量传递给 npm 脚本?

javascript - Dom 修改以使用重置按钮清除单选按钮信息

Android 构建不考虑 proguard-rules

警告 “dereferencing type-punned pointer will break strict-aliasing rules” 的后果

ios - 大应用编译时间长

javascript - JS : using eval on a function while trying to pass an array as parameter, 但它抛出一个错误

javascript - 边界不起作用

javascript - 为什么缩小或混淆的JavaScript比未压缩的代码性能更差?

java - 任务 ':app:transformClassesAndResourcesWithProguardForRelease' 执行失败。 > java.io.IOException : Please correct the above warnings first