Search
线上出 bug 了?你需要这套组合拳
Vue 项目里,错误处理主要分这几个层次:
在 main.ts 里配置:
main.ts
app.config.errorHandler = (err, instance, info) => { // 组件渲染、生命周期、Watcher 里的错误都能抓到 console.error("出错了:", err); uploadErrorLog(err, info); // 上报到监控平台 };
这个是兜底的,所有没被处理的错误都会跑到这里。
用 onErrorCaptured 钩子,可以捕获后代组件的错误:
onErrorCaptured
<script setup> import { onErrorCaptured } from "vue"; onErrorCaptured((err, instance, info) => { console.error("子组件错了:", err); // return false 会阻止错误继续往上冒泡 return false; }); </script>
router.onError((error) => { console.error("路由加载失败:", error); });
Vue 的 errorHandler 抓不到 Promise reject 的错误,得用原生的事件监听:
window.addEventListener("unhandledrejection", (event) => { console.error("Promise .reject 没处理:", event.reason); // 记得上报! });
搞定!记住这套组合拳:全局捕获 + 组件级捕获 + 路由 + promise + 监控上报。