在 JavaScript 中,当必须缩小文件时省略分号是否安全?
In JavaScript, is it safe to omit semicolons when file have to be minifyed?
几周以来,我在 JavaScript 文件中省略了分号。我今天意识到如果文件被缩小可能会导致问题。
我阅读了以下资源:
- https://www.reddit.com/r/javascript/comments/3ykv0w/is_it_actually_true_that_minifiers_break_js_code/
- https://github.com/mrclay/minify/issues/396
- https://github.com/github/fetch/issues/420
有两种观点:
- 如果一个工具处理了一个 javascript 有效的文件并将其变成了一个无效的 javascript 文件,那么该工具就没有兑现其“不改变其功能”。
- 由于省略分号会阻止文件缩小,因此必须添加分号。
一般情况下最好的选择是什么?我的意思是 "general case" 源代码应该是通用的并且可以被任何缩小器缩小。
它不应该导致问题,只要缩小器中没有错误。
这是因为 JavaScript 没有分号的代码完全有效,可解析 JavaScript。
而且这可以准确且可重复地缩小。
不涉及 "guesswork" - 仅涉及基于 specification.
的明确定义的确定性解析算法
先前已在与 ASI 相关的缩小器中发现错误。
因此,根据缩小器的成熟度,出现此类错误的风险可能会增加。
也就是说,以前在与 ASI 无关的缩小器中也发现了错误,因此无论您是否使用分号,您的缩小器总是有引入问题的风险。
鉴于所有这些,以及 JavaScript 压缩器的高质量和成熟度,我会遵循让您的团队最开心的编码风格。
几周以来,我在 JavaScript 文件中省略了分号。我今天意识到如果文件被缩小可能会导致问题。
我阅读了以下资源:
- https://www.reddit.com/r/javascript/comments/3ykv0w/is_it_actually_true_that_minifiers_break_js_code/
- https://github.com/mrclay/minify/issues/396
- https://github.com/github/fetch/issues/420
有两种观点:
- 如果一个工具处理了一个 javascript 有效的文件并将其变成了一个无效的 javascript 文件,那么该工具就没有兑现其“不改变其功能”。
- 由于省略分号会阻止文件缩小,因此必须添加分号。
一般情况下最好的选择是什么?我的意思是 "general case" 源代码应该是通用的并且可以被任何缩小器缩小。
它不应该导致问题,只要缩小器中没有错误。
这是因为 JavaScript 没有分号的代码完全有效,可解析 JavaScript。
而且这可以准确且可重复地缩小。
不涉及 "guesswork" - 仅涉及基于 specification.
的明确定义的确定性解析算法先前已在与 ASI 相关的缩小器中发现错误。
因此,根据缩小器的成熟度,出现此类错误的风险可能会增加。
也就是说,以前在与 ASI 无关的缩小器中也发现了错误,因此无论您是否使用分号,您的缩小器总是有引入问题的风险。
鉴于所有这些,以及 JavaScript 压缩器的高质量和成熟度,我会遵循让您的团队最开心的编码风格。