必须装volar(切taken over mode)和nuxt devtools插件,禁用vetur;需手动配置tsconfig.json/jsconfig.json的baseurl与paths别名,并用pwa-node调试npx nuxi dev。

必须装 Volar(切 Taken Over Mode)+ Nuxt DevTools,缺一不可;Vetur 会直接破坏类型系统,务必禁用。
为什么 definePageMeta 标红、~/components 跳转失败
这不是代码写错了,是 VSCode 根本没识别 Nuxt 的语义。Volar 默认在 Strict Mode 下只认标准 Vue API,definePageMeta、useAsyncData 这类 Nuxt 特有函数类型推导全失效。而 ~/components/Hello.vue 跳转失败,是因为 VSCode 类型服务压根没读取 Nuxt 运行时生成的 .nuxt/tsconfig.json,也没继承 paths 别名配置。
- 按
Ctrl+Shift+P(macOS 为Cmd+Shift+P),执行Volar: Switch to Taken Over Mode - 切换后必须关闭并重新打开整个文件夹(不是仅重启窗口)
- 彻底禁用
Vetur:它与 Volar 冲突,会导致所有.vue文件的<script setup></script>类型提示整体崩掉
tsconfig.json 或 jsconfig.json 必须手动补 baseUrl 和 paths
VSCode 不自动继承 Nuxt 的别名规则。哪怕项目跑得通,编辑器里照样标红——因为类型系统找不到 ~/ 指向哪。
- TS 项目:确保根目录
tsconfig.json包含"extends": "./.nuxt/tsconfig.json"和"types": ["nuxt"] - JS 项目:用
jsconfig.json,且必须含"baseUrl": "."和"paths"映射(如"~/*": ["src/*"]) - 改完后立刻执行
Ctrl+Shift+P→TypeScript: Restart TS server,否则缓存残留,提示照旧失效
launch.json 调试必须用 pwa-node + npx nuxi dev
"type": "node" 是错的。Nuxt 3 启动的是 nuxi dev 进程,不是裸 Node.js;VSCode 默认调试器抓不到它,且调试模式下不读全局 PATH。
-
runtimeExecutable必须是"npx",写成"nuxi"会直接报command not found - 服务端断点(如
server/api/hello.ts)只在真实 HTTP 请求时触发,纯客户端导航(<nuxtlink></nuxtlink>)不会重新执行 SSR 逻辑 - 断点灰了?检查
nitro.options.sourceMap = true是否开启,否则 VSCode 找不到原始 TS 文件
Nuxt DevTools 插件不能省,也不是摆设
它不只是右下角多一个图标。不装它,~/ 别名解析、useServerSeoMeta 语义理解、服务端组件高亮、运行时状态面板全失效。VSCode 就当普通 Vue 项目处理,pages/index.vue 里写 definePageMeta 必然标红。
- 插件启用后,右下角出现 Nuxt 图标,点开能看服务端日志、组件层级、请求链路
- 如果没生效,确认是否通过
nuxi dev --devtools启动(部分版本需显式启用) - 别指望靠“全局装了 nuxi”或“随便装个 Vue 插件”糊弄过去——Nuxt 的语义支持是插件 + 配置双绑定的结果
最常被忽略的其实是三者联动:Volar 模式切对了、tsconfig.json 补全了、launch.json 用对了调试类型。任意一环断掉,useRuntimeConfig 就没提示、server/api 断点就不进、~/ 跳转就失败——它们不是孤立问题,而是同一配置链上的不同表象。











