JavaScript代码混淆后变量名乱码导致调试困难怎么办?
我用了一个在线的JS混淆工具把代码加密了,结果所有变量都变成像a1b2c3这种名字,现在线上出问题根本没法调试。有没有办法在混淆的同时保留一定的可读性,或者生成source map?
试过把混淆强度调低,但感觉还是太乱。也看到有些工具说支持source map,但不知道怎么配合浏览器使用。比如我现在混淆后的代码长这样:
var _0x1a2b=['log','hello','console'];(function(_0x3c4d5e,_0x6f7a8b){var _0x9c0d=function(_0x1e2f){return _0x1a2b[_0x1e2f];};_0x6f7a8b[_0x9c0d('0x2')][_0x9c0d('0x0')](_0x9c0d('0x1'));})(this);
//# sourceMappingURL=app.js.map浏览器 DevTools 就会自动加载它,还原成原始代码结构,变量名、行号全都能看到,调试就和没混淆一样。
举个实际例子,用
javascript-obfuscator这个 npm 包(命令行工具,比在线工具靠谱):关键参数是
--source-map true和几个关闭高强度干扰的开关,比如--string-array false(别把字符串抽成数组)、--control-flow-flattening false(别打乱控制流),不然就算有 source map 也可能错位。如果你已经在用某个在线工具,先看看它有没有“生成 source map”这个选项,有的话勾上,下载下来后把生成的
.map文件跟混淆后的 JS 放一起,再加那行注释就行。另外提醒一句:source map 只能帮你本地调试,别把它传到生产环境,不然等于白混淆了。线上部署前记得删掉 map 文件和那行注释。