You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何UglifyJS不混淆指定属性?即使显式要求仍无效果

为什么UglifyJS即使显式要求,也不混淆test、action、type这些属性?

这事儿我之前也碰到过,其实是UglifyJS的默认行为在搞鬼——它内置了一份属性保留黑名单,专门保护那些常见的、容易和DOM/JavaScript原生API冲突的属性名,你提到的test、action、type、text这些全在这份名单里!

从你的测试结果就能看出明显规律:

  • 单数形式的test、action、type、text完全没被混淆,原样保留
  • 它们的复数形式tests、actions、texts则被正常混淆(比如tests变成s,texts变成i),说明复数不在默认黑名单里

为什么要默认保留这些属性?

UglifyJS这么做是为了避免误破坏代码——比如test是正则表达式的核心方法,type是表单元素、事件对象的常用属性,action是表单的提交地址属性,text常用来操作元素文本内容。如果随便混淆这些属性,很可能导致代码调用原生API时出错。

如何强制混淆这些属性?

如果你确定自己代码里的这些属性完全是自定义的,不会和原生API冲突,可以通过清空默认保留列表来让你的混淆规则生效。比如用--mangle-props reserved=[]参数覆盖默认黑名单:

uglifyjs tmp.js -m --mangle-props regex="/^(test|action|type|text)$/" --mangle-props reserved=[]

这样指定的属性就会被正常混淆了。

再看你的测试细节

你尝试过用regex包含这些属性,但依然没生效,就是因为默认保留列表的优先级更高——UglifyJS会先检查属性是否在默认保留名单里,再看你的正则规则。只有清空默认保留列表,你的自定义规则才能覆盖它。

内容的提问来源于stack exchange,提问作者mhchem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:34:35