volar 是 vue 3 唯一可靠选择,需禁用 vetur、完全重启 vscode、配置 volar.server.config.json 并设 skiplibcheck 为 false 才能正常工作。

Volar 是 Vue 3 的唯一可靠选择,Vetur 已停更且无法正确支持 defineProps、ref() 类型推导或 <script setup></script> 补全;强行用 Vetur 只会看到 Cannot find name 'defineProps' 或 Property 'xxx' does not exist 这类报错。
为什么装了 Volar 还没语法提示?禁用 Vetur 并完全重启 VSCode
VSCode 默认启用 Vetur(尤其老项目打开过 .vue 文件),它会抢占语言服务权限,Volar 根本没机会加载。
- 在扩展面板搜索
Vetur,右键 → Disable (Workspace)(不是卸载,也不是只关配置项) - 确认
Volar(作者为 Vue)已安装并启用,版本 ≥1.10.0(Vue 3.4+ 需要defineModel支持) - 必须完全退出 VSCode 再重新打开,仅 “Reload Window” 不够——语言服务器不会重注册
- 打开任意
.vue文件,看右下角状态栏是否显示Vue (Volar),不是Vue (Vetur)或Plain Text
volar.server.config.json 不生效?名字、位置、格式三者缺一不可
这个文件不是可选配置,是 Volar 语言服务器启动时唯一认的入口。写错一个字符就静默失效,不会报错也不会提醒。
- 文件名必须严格为
volar.server.config.json(不是volar.config.json,也不是tsconfig.volar.json) - 必须放在项目根目录(即
package.json所在层),不能在src/、configs/或.vscode/下 - 内容必须是合法 JSON:无注释、无尾逗号、顶层只含
plugins、types、compilerOptions等允许字段 - 改完后手动执行命令:
Ctrl+Shift+P→ 输入Volar: Restart Server,不触发就不会读新配置
ref() 类型还是 any?检查 tsconfig.json 的 skipLibCheck
Volar 依赖 TypeScript 加载 @vue/runtime-core 类型定义来推导 ref<string>()</string>,但默认脚手架常设 "skipLibCheck": true,直接跳过所有 node_modules 下的类型。
- 打开项目根目录的
tsconfig.json,定位到compilerOptions - 确保
"skipLibCheck": false(Vue 3.3+ 官方推荐值) - 如果用了
"extends": "./tsconfig.base.json",得去那个被继承的文件里改,只改当前文件无效 - 保存后等 VSCode 右下角提示 “TypeScript 已重新加载”,再检查
ref是否恢复类型(比如悬停显示Ref<string></string>)
<script setup></script> 里组件不补全?开启 experimentalResolveType
默认情况下,Volar 不解析 defineComponent 或 defineAsyncComponent 的返回类型,所以你在模板里敲 <mycomp> 按 Tab 就没补全。</mycomp>
- 在项目根目录的
volar.server.config.json中加入:"experimentalResolveType": true - 该选项开启后,Volar 会主动索引
setup内定义的组件变量名,并映射到模板使用处 - 注意:这会略微增加首次启动语言服务器时间,但对日常编辑无感知影响
- 若仍不生效,确认你没在
tsconfig.json里漏掉"types": ["vue"]
最常被忽略的是:Volar 的行为高度依赖项目根目录是否存在合法 tsconfig.json 和正确的 skipLibCheck 值——这两点不满足,哪怕插件装得再标准,ref、computed、defineProps 全部退化为 any,且没有任何错误提示告诉你原因。











