vscode无法直接格式化单行js代码因其默认格式化器仅做规则性缩进换行,不支持反混淆;需借助javascript booster或js-css-html formatter插件美化,或用terser命令行工具配合--format beautify参数实现结构还原。

VSCode 里直接格式化单行 JS 代码根本不行
因为 VSCode 默认的 JavaScript 格式化器(如 Prettier 或 ESLint)会把 var a=function(){return!0;}; 当作合法语法,不认为它“需要展开”——它只负责按规则缩进、换行、空格,不负责“反混淆”。所谓“还原”,本质是代码美化(beautify),不是格式化(format)。
你看到的单行 JS,大概率是被 UglifyJS、Terser 或 webpack 压缩过的产物,变量名被缩短、空格全删、逻辑扁平化。VSCode 本身没内置反混淆能力,必须靠插件或外部工具链介入。
装插件:JavaScript Booster 或 JS-CSS-HTML Formatter
这两个插件能真正把单行 JS “撑开”,但行为差异很大:
-
JavaScript Booster:基于 AST 解析,对压缩后的代码鲁棒性较好,支持
eval内字符串解包、简单字符串还原(如["a","b"][i]→i===0?"a":"b"),但不开源,免费版有行数限制 -
JS-CSS-HTML Formatter:轻量,纯前端美化,不解析逻辑,只按括号/分号/花括号做换行缩进。适合已知无
eval、无动态 key 的代码,快且稳定
安装后右键选择 Beautify JavaScript 或快捷键 Shift+Alt+F(需在设置里确认绑定)。别指望它恢复原始变量名——那是不可能的,除非你有 sourcemap。
用 Terser 命令行手动还原(推荐用于批量或调试)
如果你有 Node.js 环境,terser 本身支持“反向压缩”:用 --mangle false --compress false --format beautify 把压缩结果变回可读结构:
terser obfuscated.js --mangle false --compress false --format beautify -o pretty.js
注意三点:
- 它不会恢复原始变量名(
a还是a),但会加缩进、换行、空格,让控制流清晰可见 - 如果原代码用了
eval或字符串拼接函数名(如window["f"+"unc"]()),terser不会执行或推断,只做静态美化 - 某些极简压缩(比如把
if(x){y()}压成x&&y())经此处理会变回if形式,但前提是没开启--compress
别碰 sourcemap,除非你本来就有
有人搜“VSCode sourcemap 还原混淆 JS”,这是误区。sourcemap 是构建时生成的映射文件,用来把压缩后代码定位回原始源码行,它本身不包含变量名或逻辑信息。如果你拿到的是纯单行 JS 文件,且没有配套的 .map 文件,那它就不存在——强行找 sourceMappingURL 注释或尝试加载只会失败。
真有 map 文件?VSCode 会自动识别并启用调试映射,但仅限于 DevTools 调试场景,不参与编辑器内的代码美化。想看原始变量名,唯一路径是拿到构建前的源码或完整 sourcemap 配套包。
混淆和压缩是单向操作,所有“还原”都只是近似可读化。变量名、注释、原始结构,没了就是没了。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











