混淆(mangle)属性时能否禁止特定符号?解决Vue保留字符报错问题
解决Vue保留字符属性混淆报错问题
属性混淆后生成的_、$开头的属性名触发Vue报错,是因为这类前缀属于Vue内部保留的命名规则。要禁止UglifyJS生成这类属性名,可以通过自定义属性混淆的转换函数来实现:
修改你的Terser配置,在mangle.properties中添加transform函数,强制混淆后的属性名不以_或$开头:
optimization: { minimize: true, minimizer: [ new TerserPlugin({ minify: TerserPlugin.uglifyJsMinify, terserOptions: { mangle: { properties: { regex: /^m_/, // 自定义属性混淆规则,规避Vue保留前缀 transform: (propName) => { let mangled = propName; // 替换开头的_或$为字母 if (/^[_$]/.test(mangled)) { mangled = mangled.replace(/^[_$]/, match => match === '_' ? 'a' : 'b'); } return mangled; } } }, }, }), ], },
补充说明
transform函数会拦截UglifyJS生成的混淆属性名,你可以根据需求调整替换规则,比如用其他字母代替,只要确保开头是合法的非保留前缀即可。- 如果需要更精准的控制,可以参考UglifyJS内部的属性名生成逻辑,在
transform里改写生成逻辑,确保所有输出的混淆名都符合Vue的命名规范。
内容的提问来源于stack exchange,提问作者Андреслав Козлов
相关产品推荐
相关产品推荐

