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
相关产品推荐
相关产品推荐

