javascript - 在 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 文件,那么该工具就无法兑现其“不改变其功能”的承诺。
- 由于省略分号会阻止文件被缩小,因此必须添加分号。
一般情况下最好的选择是什么?我的意思是“一般情况”,即源代码应该是通用的并且可以被任何缩小器缩小。
解决方案
只要缩小器中没有错误,它就不应该引起问题。
这是因为没有分号的 JavaScript 代码是完全有效的、可解析的 JavaScript。
这可以准确且可重复地缩小。
不会涉及“猜测”——只有基于规范的定义明确、确定性的解析算法。
以前在与 ASI 相关的缩小器中发现了错误。
因此,根据 minifier 的成熟度,可能会增加遇到此类错误的风险。
也就是说,以前在与 ASI 无关的压缩器中也发现了错误,因此无论您是否使用分号,您的压缩器都存在引入问题的风险。
鉴于这一切,以及 JavaScript 缩小器的高质量和成熟度,我会遵循让您的团队最快乐的编码风格。
推荐阅读
- reactjs - React-pdf _ 转换为 svg 以供预览
- azure-data-factory - 在移动到接收器时使用 azure 数据工厂在 csv 文件中添加标题
- pandas - Pandas 将函数应用于 Groupby 子数据帧
- spring-boot - Spring Boot - 从数据库中获取数据并将其存储在列表中并使用杰克逊将其解析为 JSON
- spring - 在 Spring Boot 应用程序中嵌入无头浏览器?
- java - JPA-Repository 保存:插入约束冲突后继续保存
- laravel - 如何在不重复代码的情况下将数据传输到父模板,
- c# - 无法计算 Id,因为无法将导航源“值”解析为模型中的已知实体集
- c++ - 这个正则表达式有什么问题?smatch 的后缀始终为空
- kotlin - TornadoFX (JavaFX):当视图变得可见时如何执行操作