Vue项目开启标识符混淆后组件方法名被改写,怎么保留特定函数不被混淆?
我用的是 webpack + terser 做生产构建,开启了 mangle 选项后发现 Vue 组件里的 methods 方法名全被替换成 a、b、c 这种,导致从外部调用时找不到方法。比如下面这个组件:
<script>
export default {
methods: {
handleUserSubmit() {
console.log('提交逻辑');
}
}
}
</script>
我在外部通过 ref 调用 this.$refs.myForm.handleUserSubmit() 就报错了,因为方法名被混淆了。试过在 terser 配置里加 reserved,但好像对 Vue 的 methods 不起作用,有啥靠谱的解决办法吗?
为了只保留特定的方法名,你可以使用 mangle 的 reserved 属性结合 terser-webpack-plugin 的 include 函数来实现。你需要先安装 terser-webpack-plugin,然后在 webpack 配置里这样设置:
pre class="pure-highlightjs line-numbers">
const TerserPlugin = require("terser-webpack-plugin");
module.exports = {
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
mangle: {
reserved: ['handleUserSubmit'], // 保留特定的方法名
toplevel: true, // 允许在顶层作用域之外压缩变量名
},
},
extractComments: false,
include: /(.min.js$|.(js|vue)$)/, // 仅对 js 和 vue 文件进行压缩
}),
],
},
};
这样配置之后,handleUserSubmit 方法名就不会被混淆了。记得在你的项目中引入这个 webpack 配置文件。希望这样能帮到你!