调试Nuxt 3 SSR必须用pwa-node,因nuxi dev启动的是Nitro服务而非裸Node进程;launch.json中type设为pwa-node、runtimeExecutable为"npx"、runtimeArgs为["nuxi","dev"];server端断点仅在真实HTTP请求时触发,需确保sourceMap开启、Volar切Taken Over Mode并重启VSCode窗口,且tsconfig.json显式继承.nuxt/tsconfig.json并声明types。

调试Nuxt 3 SSR必须用pwa-node,不是node
VSCode 默认的 node 调试器无法 attach 到 nuxi dev 启动的进程,因为 Nuxt 3 实际运行的是由 nuxi 包装的 Nitro 服务,不是裸 Node.js 进程。写 "type": "node" 会导致断点完全不命中,连启动都报错。
-
launch.json中type必须设为pwa-node -
runtimeExecutable必须是"npx",不能是"nuxi"(VSCode 调试模式不读全局 PATH) -
runtimeArgs固定为["nuxi", "dev"],加--devtools可选但不影响调试本身 - 别配
port或address—— 这是 attach 模式才需要的字段,launch 模式下由 nuxi 自行管理
服务端断点只在真实 HTTP 请求时触发
server/api/、server/plugins/、useServerSeoMeta 这类代码,只在 SSR 渲染或直接请求 API Route 时执行。点击 <nuxtlink></nuxtlink> 导航不会重跑服务端逻辑,断点自然不触发。
- 验证是否真进服务端:在
server/api/hello.ts里加console.log('ssr hit'),用浏览器地址栏访问/api/hello看终端输出 -
useServerSeoMeta仅在首次 SSR 时调用,后续客户端跳转无效,别把它当响应式钩子用 - 确保
nitro.options.sourceMap = true(默认开启),否则断点会灰掉
Volar 必须切到 Taken Over Mode,且重启整个 VSCode 窗口
Strict Mode 下,definePageMeta、useAsyncData 这些 Nuxt 特有 API 会被当成未定义函数,类型提示全崩。这不是插件没装好,而是模式没切对。
- 按
Ctrl+Shift+P→ 输入并执行Volar: Switch to Taken Over Mode - 必须关闭整个 VSCode 窗口(不只是重载窗口),再重新打开项目文件夹 —— TS Server 不会热重载此配置
- 彻底禁用
Vetur,它和 Volar 冲突,会导致所有.vue文件类型系统失效
tsconfig.json 必须显式继承 .nuxt/tsconfig.json 并声明 types
VSCode 不自动读取 Nuxt 在构建时生成的 .nuxt/tsconfig.json,也不默认识别 "nuxt" 类型包。没这层配置,~/components 跳转会标红,useRuntimeConfig 没提示,definePageMeta 直接报错。
- 根目录
tsconfig.json至少含:{"extends":"./.nuxt/tsconfig.json","compilerOptions":{"types":["nuxt"]}} - 改完后立刻执行
Ctrl+Shift+P→TypeScript: Restart TS server - 如果项目没有
tsconfig.json,VSCode 就当纯 JS 处理,Nuxt 类型支持完全不可用
runtimeExecutable 必须是 npx」这两处。


















