You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级最新CRA与Node 18后出现随机未捕获运行时错误

解决方案

1. 定位Cancel对象来源

Cancel对象一般来自异步操作的取消逻辑:比如axios请求取消、AbortController终止fetch请求、React Router快速切换路由时的导航取消。先排查项目中这类场景。

2. 全局过滤Cancel类型的未捕获Promise拒绝

在项目入口文件(如src/index.js)添加以下代码,阻止Cancel触发错误提示:

window.addEventListener('unhandledrejection', (event) => {
  // 根据项目中Cancel对象的实际特征调整判断条件
  const isCancel = event.reason && (event.reason.name === 'Cancel' || String(event.reason) === 'Cancel');
  if (isCancel) {
    event.preventDefault(); // 阻止错误覆盖层弹出
  }
});

3. 让Cancel对象继承Error(若为自定义Cancel)

如果是项目里自己实现的Cancel类,修改为继承Error,这样CRA的错误处理能正确识别并更友好处理:

class Cancel extends Error {
  constructor(message = 'Cancel') {
    super(message);
    this.name = 'Cancel';
  }
}

4. 自定义CRA的错误捕获逻辑(CRA 5+适用)

通过覆盖CRA提供的错误处理钩子,过滤Cancel错误:

if (process.env.NODE_ENV === 'development') {
  // 覆盖默认的错误捕获逻辑
  if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {
    const originalCatch = window.__REACT_DEVTOOLS_GLOBAL_HOOK__.catchRuntimeError;
    window.__REACT_DEVTOOLS_GLOBAL_HOOK__.catchRuntimeError = (error) => {
      // 过滤Cancel错误
      if (error?.message === 'Cancel' || error?.name === 'Cancel') {
        return false; // 返回false不显示错误提示
      }
      return originalCatch?.(error);
    };
  }
}

内容的提问来源于stack exchange,提问作者Keremcan Buyuktaskin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:27:37