next.js 13+断点不命中根本原因是主进程仅调度,业务代码运行在动态子进程,需同步配置--inspect参数与vscode attach调试:修改package.json脚本启用--inspect=9229、launch.json设为node/attach模式、localroot与remoteroot一致、开启sourcemaps及tsconfig.sourcemap。

为什么next dev默认断点不命中
不是插件没装对,也不是TSX写错了——Next.js 13+(尤其App Router)启动后,主进程只做调度,getServerSideProps、app/api/route.ts、Server Actions等实际运行在动态fork出的子进程中。VSCode用默认launch配置attach到主进程,根本看不到业务代码,断点显示空心圆,hover提示"Breakpoint ignored because generated code not found"。
package.json里必须加--inspect=9229
不能只改launch.json,两件事必须同步做:
- 把
"dev": "next dev"改成"dev": "next dev --inspect=9229"(pnpm用户用pnpm exec next dev --inspect=9229) - 端口被占时可换,比如
--inspect=0.0.0.0:9230,但后续所有地方必须严格对齐 - 别用
--inspect-brk——它会让进程卡死在第一行,每次热重载都得手动resume,开发节奏直接崩
launch.json必须用attach而非launch
配置类型必须是"type": "node" + "request": "attach",不能用pwa-node或node-terminal:
-
"port": 9229(或你选的其他端口)必须和--inspect参数一致 -
"localRoot"和"remoteRoot"都设为"${workspaceFolder}"——Next.js生成的source map是相对路径,不一致就映射失败,断点灰掉 - 务必加上
"restart": true,否则热重载杀旧进程拉新进程后,调试会立刻断连 -
"sourceMaps": true要显式开启,不然即使连上了也找不到源码上下文
next.config.js里必须启用sourceMaps
Next.js 13.4+ 默认不生成完整source map,尤其TSX文件经SWC编译后更易丢映射:
- 在
next.config.js中加入experimental: { sourceMaps: true } - 旧版本需手动patch Webpack:
webpack: (config) => { config.devtool = 'source-map'; return config; } - 确认
tsconfig.json里"sourceMap": true已开启,且"jsx": "preserve"没被意外覆盖
--inspect和attach没配对、sourceMaps没开、localRoot/remoteRoot不一致这三处——漏一个,断点就永远灰着。











