JScript 条件编译 + JavaScript 压缩 = 预处理器?
是否有任何 JS 压缩器允许您使用 #ifdef-pre-processing-type 操作"nofollow">JScript 条件编译?
如果 @set
定义了一个“变量”,那么 JS 压缩器就不能删除条件编译逻辑定义的未编译的代码吗?
我对 JScript 语法有点不确定,但也许这样的东西
/*@cc_on
@set (@version = 1)
@if (@version == 1)
alert('Version 1');
@else
alert('Not version 1');
@end
@*/
可以压缩成
alert('Version 1');
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
闭包编译器可以通过 @preserve 注释,但是闭包编译器和任何其他基于解析树的压缩器总体上都不能很好地处理 CC。
这是一个难题。处理条件编译需要推理多个可能的解析树,而不仅仅是一个。
一些非常简单的压缩器只是将 JS 视为一系列标记而不是操作解析树,这可能在条件编译方面做得更好,但它们在压缩方面总体上表现较差。
一种解决方案可能是编译所有源文件,除了具有条件编译指令并且仅导出其他源文件使用的变量的源文件。
Closure compiler can preserve comments via the @preserve annotation, but neither closure compiler not any other parse-tree based compressor does a good job with CC in general.
It's a hard problem. Handling conditional compilation requires reasoning about multiple possible parse trees, instead of just one.
Some of the really simple compressors that just treat JS as a series of tokens instead of manipulating a parse tree might do better with conditional compilation but they do much worse overall at compressing.
One solution might be to compile all your source files except one that has conditional compilation directives and that simply exports variables that are used by the other source files.