JScript条件编译+ JavaScript压缩=预处理器?

时间:2011-06-28 16:41:22

标签: javascript compression conditional-compilation

是否有任何JS压缩器允许您使用JScript conditional compilation执行#ifdef预处理类型的操作?

如果@set定义一个“变量”,JS压缩器不能删除条件编译逻辑在未编译时定义的代码吗?

我对JScript语法有点不确定,但可能就像这样

/*@cc_on
    @set (@version = 1)
    @if (@version == 1)
        alert('Version 1');
    @else
        alert('Not version 1');
    @end
@*/

可压缩成

alert('Version 1');

1 个答案:

答案 0 :(得分:0)

Closure编译器可以通过@preserve注释保留注释,但是封闭编译器和其他任何基于parse-tree的压缩器都不能很好地处理CC。

这是一个难题。处理条件编译需要推理多个可能的解析树,而不仅仅是一个。

一些非常简单的压缩器只是将JS视为一系列令牌而不是操纵解析树,但在条件编译时可能会做得更好,但它们在压缩时整体上要差得多。

一个解决方案可能是编译所有源文件,除了具有条件编译指令的文件,并且只导出其他源文件使用的变量。