升级到最新 CRA 和 Node 18 后出现随机“未捕获的运行时错误”消息

Gez*_*ker 1 reactjs create-react-app

我们的 DevOps 团队通知我们,他们将把所有服务器升级到 Node 18。但是我们的应用程序只能在 Node 16 上正常工作。所以我将 CRA 升级到最新版本,一开始看起来还不错。但随后随机的“未捕获的运行时错误”覆盖消息开始在开发模式下弹出。它们是完全随机的,当我单击链接时,有时它会显示,下次它不会显示。根据错误信息我无法找到问题的根源。留言总是这样的:

\n
Uncaught runtime errors:\n\xc3\x97\nERROR\nCancel\n    at handleError (http://localhost:3000/static/js/bundle.js:614149:58)\n    at http://localhost:3000/static/js/bundle.js:614172:7\n
Run Code Online (Sandbox Code Playgroud)\n

当我查看控制台时,它是这样的:

\n
Uncaught (in promise) \nCancel {message: undefined}\nmessage: undefined\n[[Prototype]]: Object\n
Run Code Online (Sandbox Code Playgroud)\n

当我查看bundle.js 中的指定行时,它们是这样的:

\n

捆绑.js:614149:58

\n
var handleError = function handleError(error, fallbackMessage) {\n     **var errorObject = error instanceof Error ? error : new Error(error || fallbackMessage);**\n      var shouldDisplay = typeof options.catchRuntimeError === "function" ? options.catchRuntimeError(errorObject) : true;\n      if (shouldDisplay) {\n        overlayService.send({\n          type: "RUNTIME_ERROR",\n          messages: [{\n            message: errorObject.message,\n            stack: (0,_overlay_runtime_error_js__WEBPACK_IMPORTED_MODULE_1__.parseErrorToStacks)(errorObject)\n          }]\n        });\n
Run Code Online (Sandbox Code Playgroud)\n

捆绑包.js:614172:7

\n
(0,_overlay_runtime_error_js__WEBPACK_IMPORTED_MODULE_1__.listenToUnhandledRejection)(function (promiseRejectionEvent) {\n   **var reason = promiseRejectionEvent.reason;**\n      handleError(reason, "Unknown promise rejection reason");\n    });\n
Run Code Online (Sandbox Code Playgroud)\n

Gez*_*ker 5

最后我找到了问题的根源。最新版本的 webpack-dev-server 有一个新功能,被描述为“覆盖显示未处理的承诺拒绝”。这是导致问题的原因,降级到以前的版本解决了它。

npm install webpack-dev-server@4.14.0 --save --save-exact --save-dev
Run Code Online (Sandbox Code Playgroud)