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

如何配置Terser仅混淆匹配正则的属性,保留其余变量与函数名?

问题解决思路

你的核心问题在于:Terser默认会开启局部变量/函数参数的混淆,而keep_fnames仅控制函数名的保留,不涉及变量和参数。要实现「保留所有变量/参数/函数名,仅混淆匹配/^_/的属性」,需要调整mangle的核心配置:

修正后的配置

const terserOptions = {
  compress: {
    defaults: false,
  },
  format: {
    beautify: true,
    comments: "all",
  },
  mangle: {
    enabled: false, // 关闭全局变量、参数的混淆
    keep_fnames: true, // 保留函数名
    properties: {
      enabled: true, // 单独开启属性混淆
      regex: /^_/, // 仅混淆以_开头的属性
    },
  },
};

配置说明

  1. mangle.enabled: false:关闭Terser默认的变量/参数混淆逻辑,这是阻止arg和keepThisVarName被重命名的关键。
  2. properties.enabled: true:单独启用对象属性的混淆功能,配合regex: /^_/,仅对以_开头的属性名进行混淆。
  3. keep_fnames: true:确保函数名myFunc不被修改。

验证结果

使用上述配置处理你的输入代码,会得到符合预期的输出:

function myFunc(arg) {
  const keepThisVarName = arg * 2;
  return {
    keepThisProp: keepThisVarName,
    p: keepThisVarName, // '_mangleThisOne' 已被混淆
  }
}

额外补充:如果需要混淆特定变量(而非属性)

如果你的需求是「仅混淆匹配正则的变量,保留其余所有名称」,Terser没有直接的配置项,但可以通过以下方式实现:

  • 先扫描代码,收集所有匹配目标正则的变量名;
  • 将所有非匹配变量名加入mangle.reserved数组,再开启全局混淆。
    不过这种方式需要额外的代码扫描逻辑,适合复杂场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:20:31