JavaScript 压缩与美化
缩短局部变量名最省字节,但会毁掉那些把名字当文本来查的代码——eval、new Function,或者读取参数名的框架。如果你依赖这些,就关掉它。
JavaScript 压缩 - 常见问题
Terser——UglifyJS 的继任者,也是 webpack、Rollup 和 Vite 的默认压缩器。它就是你的构建步骤已经在跑的那个引擎,所以这里的输出和构建出来的一致,不是近似。
最常用的格式化工具
全部时间
新
Markdown 编辑器
编写 Markdown 并并排查看渲染结果。支持标题、列表、表格、代码块和链接;可复制 HTML 或下载 .md 与 .html 文件。在浏览器中运行。
这个工具能做什么
压缩 JavaScript 不是删空格。用查找替换来做,会得到看着没问题、行为却不一样的文件,而这个差别要到线上才冒出来。这个页面在你的浏览器里跑 Terser——大多数项目构建步骤背后的那个引擎。
使用方法
- 1 把 JavaScript 粘到框里。
- 2 选好目标版本,并决定要不要缩短变量名。
- 3 点压缩——或者点美化,把压缩过的文件重新摊开。
为什么要解析,而不是查找替换
你没写的分号,JavaScript 会替你补上。把「return」和它的值之间的换行删掉,函数就开始返回 undefined——文件依旧合法,只是干的事变了。同一个字符在这里是除号,在那里是正则。要分清这些靠的是语法,不是模式匹配,所以这个页面用的是真正的解析器。
真正变小的是什么
空白和注释是里面最小的一块。真正省下来的,是把局部变量改成单个字母、把分开的声明合成一条、把常量算出来、把永远跑不到的代码扔掉。这些全是树上的操作——压缩器必须知道两个名字指的是同一个绑定,而且它们之间没有谁读过它。
缩短变量名会在哪里咬人
压缩器只能重命名它看得见的东西。写成文本的名字它看不见:eval("count + 1")、new Function("a", "return a"),或者靠读函数参数名来决定注入什么的框架。这些还在找旧名字,然后什么也找不到。这是语言的性质,不是工具的毛病——所以这个开关交给你,而不是默默替你打开。
美化不等于把原文件还给你
美化会把缩进和换行放回去,压缩过的文件重新变得能读。但被丢掉的东西回不来:注释没了;如果变量名被缩短过,它们就一直是短的——没有工具能猜出「e」曾经叫「errorMessage」。要调试线上文件,只有 source map 能把原件带回来。