我们希望行号在客户端 JavaScript 发生异常时有用。理想的解决方案是理解 ASI(自动分号插入)规则,即语法感知而不是基于 RegExp/文本。
我发现的最接近的是 UglifyJS2,其分号选项设置为 false。 [编辑:UglifyJS2 还需要将最大行长度选项设置为较低值,并且可能未勾选序列选项,否则它仍然会生成长行,例如1000 个字符长]。
PS:我们必须使用 Windows 来进行构建过程(由于各种原因而被锁定),并且我们的构建脚本已经依赖于 Python 和 Java(JS 的closurecompiler、CSS 的 yuicompressor、用于将图像嵌入 CSS 的 cssembed)和我我真的不想添加另一个构建过程依赖项(Node、Ruby 或 Web 服务等),而且我强烈不喜欢使用 RegExp 解决方案,因为我认为文本处理对于可靠的生产解决方案来说太脆弱了。
PPS:我不想依赖源映射,因为它们要复杂得多(跨浏览器问题、内部和客户端支持问题、管理和查找正确源映射的困难)。
PPPS:对行号提出新要求的原因是我们开始使用 https://github.com/getsentry/raven-js如果异常的行号有用,它将是最有用的。我们的客户端代码是单页 Ajax/json 应用程序。理论上,使用换行符而不是分号对 gzip 大小的改变很小。
最佳答案
UglifyJS2 是我发现的唯一可以在以下设置下正常工作的解决方案:
- 分号选项设置为 false
- 最大行长度选项设置为相当低的值
- 未勾选序列选项
行长度的选择涉及到一种折衷:较短的行长度更适合诊断异常发生的位置,但当您减少行长度时,gzip 大小会略有增加。
关于JavaScript 压缩器输出换行而不是分号 - 基于 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353059/