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

React17项目升级Node18.20 LTS后npm start报回调重复调用错误

问题描述

我正在开发一个React17项目,此前已从Node14升级至Node16.20 LTS,近期通过npm install或npm ci升级到Node18.20 LTS时未出现异常,但执行npm start启动项目时失败,仅提示“the callback was already called”。

项目启动命令如下:

typescript@1.0.0 start
cross-env NODE_ENV=development webpack-dev-server --config config/webpack/webpack.dev.js --mode development --open --hot

报错日志信息:

ℹ 「wds」: Project is running at http://localhost:9002/
ℹ 「wds」: webpack output is served from /
ℹ 「wds」: Content not from webpack is served from ....
ℹ 「wds」: 404s will fallback to /index.html
ℹ 「atl」: Using typescript@3.9.7 from typescript
ℹ 「atl」: Using tsconfig.json from /......./tsconfig.json
Error in bail mode: Error: callback(): The callback was already called.
    at context.callback (/home/...../node_modules/loader-runner/lib/LoaderRunner.js:106:10)
    at processTicksAndRejections (node:internal/process/task_queues:95:5) Error: callback(): The callback was already called.
    at context.callback (/......./node_modules/loader-runner/lib/LoaderRunner.js:106:10)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
问题原因分析
  • 旧版TypeScript loader兼容性问题:报错指向loader-runner的回调重复调用,日志里的atl是awesome-typescript-loader,这个旧版loader搭配你用的typescript@3.9.7,在Node18的异步处理机制下容易触发重复调用回调的bug。Node18对异步操作的校验更严格,暴露了旧loader里不规范的回调逻辑。
  • Node.js异步API行为变更:Node18调整了异步任务队列的处理逻辑,项目中依赖的旧包如果存在未正确判断回调是否已执行的代码,就会触发这个错误。
  • Webpack生态版本过低:你的webpack-dev-server或webpack核心版本可能和Node18不兼容,旧版本的编译/热更新流程里,异步回调的逻辑在Node18环境下会出现重复调用的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:25:02