JS 压缩JS Minifier
把 JavaScript 一键压缩瘦身、还原美化、校验语法,上线前减小体积、调试脚本更快。字符串 / 模板字符串 / 正则字面量原样保留,换行分号补全规则(ASI)安全,/*! 许可证注释不丢,文件全程不上传。
工具介绍
3 段详细说明JS 压缩是面向前端开发者的脚本瘦身工具,集压缩、美化、语法校验三大功能于一体。把上线前的脚本、单文件组件、工具函数粘贴进来,一键折叠空白缩进、移除注释,直接减小文件体积。
所有处理都在浏览器内存中完成,文件不上传任何服务器。基于单遍扫描的自研词法分析器,"字符串"、`模板字符串`(含 ${} 嵌套插值)与/正则字面量/整体识别、原样保留,零依赖、零打包,1 MB 以内处理几乎瞬时(< 100ms)。
JavaScript 的换行参与分号补全规则(ASI),盲目合并换行会改变语义。本工具采用保守压缩策略——只在明确安全的位置跨行合并(; { , ( [ 及运算符之后),} ) ] 等边界一律保留换行,压完的脚本执行结果完全一致。支持 ⌘+↵ 快捷键压缩、一键美化还原阅读、导入导出文件。
基础知识 · JS 压缩规则
ECMAScript Lexical Grammar · 6 条规则JS 压缩的本质是只删「不执行」的内容。按 ECMAScript 词法规范,以下 6 条规则决定了哪些空白能删、哪些必须保留:
whitespace空白折叠let a = 1 → let a=1。这一步通常就能省掉手写代码 15%~30% 的体积。ASI guard换行与分号补全(ASI)return 后换行会解析成 return;。工具只在 ; { , ( [ ? : . = 运算符 之后合并换行,} ) ] 等边界一律保留换行,跨行合并零语义风险。comment注释移除与保留// 行注释 与 /* 块注释 */ 默认删除(工具栏可关);/*! 或含 @license / @preserve 的法律注释自动保留——版权与来源声明丢不得。string & template字符串与模板字符串原样保留"a; b"、'it\'s' 与 `共 ${a + b} 条` 内部不做任何处理——里面的空格、引号、${} 插值是内容的一部分,动了就变样。regex literal正则字面量识别/,工具按前一个 token 判定:= /re/g 是正则、a / b 是除法。字符类 [\w/] 与转义 \/ 都能正确处理,正则内容一个字符不动。boundary pair边界拼接保护a + +b 压成 a++b 就变成自增;return x 压成 returnx 直接报错。工具对 + + - - & & / / ? . 等边界自动补空格,词法零变化。return\nthrow\nbreak\ncontinue\nyield 等受限产生式之后的换行永远保留,ASI 行为与源文件一致。"字符串"、`模板${x}` 与 /正则/ 整体成 token 原样保留——里面的分号、括号、空格不会被误当代码处理。a + +b、a / /re/ 这类相邻符号自动补空格,删除空白不会拼出新 token。gzip / brotli 传输压缩,JS 体积还能再降 70% 以上——压缩 + 传输双重瘦身。使用说明
4 步快速入门使用场景
5 个真实案例部署前把内联脚本、落地页 JS 压缩到最小体积,减少首屏阻塞渲染的脚本传输量,Lighthouse 评分肉眼可见提升。
书签栏脚本对 URL 长度敏感,油猴脚本发布前压缩,粘贴、分发、安装都更轻。
工具栏实时显示本次压缩的省体积百分比,压缩前后对比一目了然,优化效果可量化。
拿到压成一行的 min.js?点「美化」按 ; { } 重排缩进,代码结构一目了然,方便阅读与排查。
引号未闭合、模板插值漏 }、正则未闭合会在输出区给出「第 X 行 第 Y 列 + 💡修复建议」,交出去之前先过一遍。
常见问题
10 个问答JS 压缩是什么?有什么用?
折叠空白缩进、移除注释、在安全处合并换行,把 JS 文件变小且不改变执行结果。也支持反向美化(重排缩进)和语法配对校验。
我的 JS 会上传到服务器吗?
不会。所有解析在浏览器内存中完成,输入内容不上传任何服务器。可断网使用、关闭网络后再打开仍能正常使用。
压缩后代码会变吗?
不会。本工具采用保守压缩策略:只动空白、注释和换行,不做变量名混淆、不改写任何表达式,压完的脚本执行结果与源文件完全一致。
什么是 ASI?为什么换行不能随便删?
ASI(Automatic Semicolon Insertion,分号自动补全)是 JS 的语法规则:某些换行处解析器会自动补分号。例如 return 后紧跟换行会被解析成 return;,盲目把换行删掉会改变语义。本工具只在明确安全的位置(; { , ( [ 及运算符之后)合并换行,其余换行原样保留。
/*! 开头的注释为什么保留了?
/*! 与包含 @license / @preserve 的注释是社区约定的法律注释(版权、来源声明),规范化工具默认保留。普通 // 与 /* 注释 */ 默认删除,工具栏关闭「去注释」后全部保留。
正则字面量会不会被当成除号?
不会。工具根据前一个 token 判断 / 的身份:前面是 ( = ; 等符号或 return、typeof 等关键字时是正则字面量,前面是变量、)、] 时是除号。字符类 [...] 中的 / 与转义的 \/ 都能正确处理。
模板字符串里的 ${} 嵌套支持吗?
支持。`...${...}...` 的插值内部是完整 JS 表达式,工具用栈式扫描逐层配对,嵌套模板、嵌套对象、正则都能正确处理,插值内容原样保留。
支持多大的 JS 文件?
建议 ≤ 5 MB。单遍扫描零依赖,1 MB 以内几乎瞬时(<100ms)。超大文件建议先拆分再处理,避免浏览器渲染卡顿。
错误位置如何定位?
引号 / 模板字符串 / 正则未闭合、块注释未闭合、花括号不配对(缺失 / 多余)时,输出区会给出「第 X 行 第 Y 列 + 出错原因 + 💡修复建议」,输入区自动选中出错字符、红框标出并滚动到位。
与 Terser / esbuild 等构建工具有什么区别?
构建工具功能更多(变量混淆、死代码消除、tree-shaking)但需要安装配置 Node 环境;本工具零安装、打开网页即可用,保守策略保证执行结果零变化,适合临时处理、快速验证和没有构建流程的小页面。