Vue3 app.config.throwUnhandledErrorInProduction 属性
核心概念
Vue3 的 app.config.throwUnhandledErrorInProduction 属性用于控制是否在生产环境中抛出未处理的错误。该属性本质是布尔值开关,当设置为 true 时会强制抛出所有未处理异常,便于定位生产环境中的潜在问题。开发者常用它替代全局 errorCaptured 生命周期钩子,实现更直接的错误控制策略。在开发阶段建议保持默认值,生产环境可根据需求调整。
基础语法
全局配置方式
// 在应用实例创建后立即设置
const app = createApp(App)
app.config.throwUnhandledErrorInProduction = false
模块级配置方式
// 通过 provide-inject 传递配置
app.provide('errorConfig', {
throwUnhandledErrorInProduction: true
})
与 warnHandler 配合
// 自定义警告处理逻辑
app.config.warnHandler = (msg, instance, trace) => {
console.warn(`自定义警告: ${msg} at ${trace}`)
}
进阶特性
| 配置项 | 类型 | 默认值 | 作用 |
|---|---|---|---|
| throwUnhandledErrorInProduction | boolean | false | 控制生产环境错误抛出 |
| warnHandler | function | null | 自定义警告处理 |
| errorHandler | function | null | 自定义错误处理 |
| performance | boolean | false | 启用性能监控 |
实战应用
生产环境错误控制
if (import.meta.env.MODE === 'production') {
// 生产环境不抛出错误
app.config.throwUnhandledErrorInProduction = false
} else {
// 开发环境启用错误抛出
app.config.throwUnhandledErrorInProduction = true
}
与 errorCaptured 配合
app.mixin({
errorCaptured(err, instance, info) {
// 捕获组件错误并记录
console.error('捕获到错误:', err)
return false // 阻止错误继续冒泡
}
})
自定义错误处理流程
app.config.errorHandler = (err, instance, info) => {
// 生产环境不抛出错误
if (import.meta.env.MODE === 'production') {
// 只记录错误日志
console.error('生产环境错误:', err)
// 可触发全局错误监控系统
// errorMonitor.send(err)
} else {
// 开发环境保留默认行为
throw err
}
}
注意事项
- ❗ 不要在生产环境设置为 true,可能导致敏感错误信息暴露
- ❗ 该属性仅影响未处理的异步错误,同步错误仍按默认方式处理
- ❗ 配合 Vite 的 import.meta.env 使用时需注意环境变量命名规范
- ❗ 不建议与全局 errorCaptured 钩子混合使用,易导致错误处理逻辑冲突
总结
掌握 app.config.throwUnhandledErrorInProduction 属性能有效控制 Vue3 应用的错误处理策略,建议开发者根据环境变量动态配置该属性,并配合 errorHandler 实现完整的错误监控体系。