我想保留我所有的变量和函数名,甚至是私有变量,并且只破坏那些与正则表达式匹配的变量和函数名。
regex(默认值: null) -将一个RegExp文本或模式字符串传递给仅匹配正则表达式的mangle属性。
但这也会破坏函数范围中的所有私有const,如:(keep_fnames和keep_classnames设置为true)。
配置:
const terserOptions = {
compress: {
defaults: false,
},
format: {
beautify: true,
comments: "all",
},
mangle: {
keep_fnames: true,
properties: {
regex: /^_/,
},
},
};输入:
function myFunc(arg) {
const keepThisVarName = arg * 2;
return {
keepThisProp: keepThisVarName,
_mangleThisOne: keepThisVarName,
}
}输出:
function myFunc(e) {
const t = 2 * e;
return {
keepThisProp: t,
p: t
}
}预期产出:
function myFunc(arg) {
const keepThisVarName = arg * 2;
return {
keepThisProp: keepThisVarName,
p: keepThisVarName, // '_mangleThisOne' should be mangled
}
}我是遗漏了什么吗?还是根本不可能在默认情况下阻止简洁者破坏他所能做的一切?如果没有,有什么想法吗?如何只损坏与正则表达式匹配的变量,并保持其余代码基的完整?
谢谢!
发布于 2022-09-13 08:32:46
从源代码来看,在使用mangle选项时,防止损坏私有方法似乎是不可能的。定义mangle_private_properties()时,Terser将始终运行mangle。
if (options.mangle) {
toplevel.compute_char_frequency(options.mangle);
toplevel.mangle_names(options.mangle);
toplevel = mangle_private_properties(toplevel, options.mangle);
}https://github.com/terser/terser/blob/a47f29a57b12999c939845781daa7d6f8bdaeff2/lib/minify.js#L264
https://stackoverflow.com/questions/73696511
复制相似问题