压缩JavaScript
与构建工具所用的同类压缩器,直接在本页面中运行。支持新语法和模块,您的源代码绝不会被存储。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
压缩后的JavaScript将显示在这里。
使用方法
粘贴JavaScript
也可以直接拖入文件。模块、类和新语法都能识别。
选择选项
重命名局部变量、删除console调用、保留许可证注释——每项都是一个开关。
复制或下载
附带压缩前后的大小。
重命名、删除,以及绝不能动的部分
压缩分三步进行,按节省的空间和付出的代价从小到大排列。空白和注释被删除,这没有代价。无用代码被删除——永远不会执行的分支、赋了值却从未读取的变量。局部名称被缩短,精心命名的calculateMonthlyTotal会变成一个字母。最后这一步节省最多,也正是它让输出无法阅读,这对发布没问题,对调试却毫无用处。
外部通过名称引用的任何东西都不能重命名,搞错这一点正是压缩工具破坏代码的原因。导出的函数、以字符串访问的对象属性、通过window访问的任何东西,以及eval中用到的名称,都必须原样保留,因为别处有代码正按您写下的名称查找它们。属性默认尤其不会改动:把user.emailAddress重命名,一旦该对象被序列化为JSON,或被单独压缩的代码读取,就会立刻出错。
请保留source map或原始文件。名称一旦消失,真实用户那里的错误堆栈就会显示为函数t第48,213个字符处出错,这什么也说明不了。source map能在调试器和错误报告中还原原始名称和行号,生成它没有任何代价,因为它是单独的文件,只在有人打开开发者工具时才会加载。
许可证注释默认保留,这是法律立场,而不是个人偏好。大量开源代码采用宽松许可,唯一的条件就是版权声明必须随代码一起分发——MIT和BSD都明确这样规定。从包含第三方代码的打包文件中删掉这些注释,就违反了允许您使用它的许可证。它们只有几百字节。
如果您需要的是别的
这一步应该放在构建流程里,而不是浏览器标签页里,现代打包工具也都会默认这样做。esbuild --minify、Rollup或Vite都会在构建时压缩、自动生成source map,而且——更重要的是——执行tree shaking,丢掉依赖项中您从未导入的导出。对真实应用来说,这比压缩一个成品文件节省得多得多。
优化之前,先测量。打包分析工具通常会揭示,文件的大部分体积来自某一个大型依赖——一个日期库、一套图标、一个为了一张图表而整个引入的图表库。替换它或改为懒加载,胜过任何程度的压缩;而代码分割让页面只加载自己需要的部分,又胜过这两者。
常见问题
我的代码会被存储吗?
不会,对源代码来说这正是关键。不存储任何内容,也没有任何服务器能看到它。把专有源代码粘贴到会将其发送到某处的在线压缩工具中,就等于泄露,无论网站声称如何保留数据——而这恰恰是人们在匆忙中不假思索就会做的事。
这和我构建工具里的压缩器一样吗?
几乎可以肯定,是的。这与webpack、Rollup、Vite以及大多数其他打包工具使用的是同一类压缩器。唯一的区别是它在这里运行,而不是需要您安装。
它会改变代码的行为吗?
不应该,而且这一点经过验证而非假设:我们的测试会压缩一个模块,分别导入原始版本和压缩版本,运行后比较结果。确实会改变的是:局部变量名(除非您关闭该选项)、可以预先算出的常量表达式,以及无用代码。任何在运行时依赖函数名或Function.prototype.toString的代码,在名称混淆后都可能出错——如果您依赖其中任何一项,请关闭名称混淆。
“按模块解析”是什么意思?
指代码是按ES模块解析,还是按普通脚本解析。模块可以使用import和export,并且始终处于严格模式。此选项默认开启,因为大多数现代代码都是模块;如果您的文件是使用"with"或依赖非严格模式行为的老式脚本,请将其关闭。
要不要删除console调用?
用于生产环境时,通常要删——它们是干扰信息,还可能向任何打开开发者工具的人泄露内部细节。此选项默认关闭,因为工具不应在没被要求的情况下悄悄删除代码。
会保留许可证注释吗?
会,默认保留。以/*!开头的注释,以及包含@license或@preserve的注释都会保留,因为从别人采用MIT许可的库中删掉它们属于违反许可证。普通注释会被删除。
能生成source map吗?
本页面不能。source map只有与位于已知URL的原始文件放在一起才有用,这不适合粘贴即复制的工具——这件事应交给您的构建工具。
有大小限制吗?
没有固定上限。几千行代码不到一秒就能压缩完;非常大的打包文件耗时更长,因为要先解析整个文件,才会开始重命名。如果要压缩整个生产环境的打包文件,构建工具是更合适的地方——本页面适合处理单个文件或快速检查。
小贴士: 重命名局部变量能让文件更小,但输出无法阅读,这对发布没问题,对调试却毫无用处——请保留source map或原始文件。许可证注释默认保留,因为删除它们可能违反您获准使用的代码的许可证。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。