我通过订阅 window.onerror 事件来捕获 JS 错误,因此如果有人捕获“未定义变量”错误,我会将其发送到服务器以进行调试。如您所知,此事件返回发生错误的“错误消息”、“url”和“line”。
问题出在压缩文件中。
如果文件被压缩,所有代码都在一行中,确定错误的确切位置是个大问题。
这个问题有什么解决办法吗?
我通过订阅 window.onerror 事件来捕获 JS 错误,因此如果有人捕获“未定义变量”错误,我会将其发送到服务器以进行调试。如您所知,此事件返回发生错误的“错误消息”、“url”和“line”。
问题出在压缩文件中。
如果文件被压缩,所有代码都在一行中,确定错误的确切位置是个大问题。
这个问题有什么解决办法吗?
不可以。为了错误记录的目的,没有办法“缩小” JavaScript 包含。
您最好的选择可能是记录错误类型,希望这能帮助您调试问题。
如果您真的想获得特定的行号,则必须删除最小化并依靠浏览器缓存来获得性能。
JavaScript 压缩器通常做两件事:
还有一些其他的优化,例如函数内联,但这些通常不是那么成问题。
至于第一点,您可以通过众多JavaScript 源格式化程序之一运行代码。这应该会给你一个可读性很强的 JavaScript 文件。
至于第二点,混淆通常是不可逆的。如果“说话”的变量名称如width
,height
或任何已更改为a
or的名称b
,您一开始就无法知道它们的含义。
如果此问题适用于开源产品,您通常可以下载源代码并尝试用它们重建问题。
如果它是封闭源代码,并且仅“美化”代码无济于事,则您必须向供应商编写错误报告。
我认为您可以使用源映射...它是一个可以在缩小时生成的文件,可用于将缩小文件的行/字符映射到原始源。
http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/
我在这里找到的关于这个问题的最佳答案
Malyw 建议你使用带有max-line-len选项和源图的 Uglify。
这可能是识别代码中确切位置的最佳解决方案