volar take over mode 必须开启,否则 defineprops 类型校验、模板中 ref 补全及跳转全部失效;需禁用 vetur、重启 vscode,并确保 tsconfig.json 正确配置。

Volar 接管模式必须开,否则 defineProps 和模板内 ref 补全全部失效
Vue 3 项目里,volar.takeOverMode 不是可选项,而是启动语言服务的前提。关掉它,VSCode 就不会把 .vue 文件交给 Volar 处理,而是 fallback 到默认的 TypeScript 或 HTML 服务——结果就是:template 里写 {{ count }} 没提示、点不进 count 定义、defineProps 的类型不校验、ref 后面不自动补 .value。
启用方式很简单,在 .vscode/settings.json 里加一行:
{
"volar.takeOverMode": true
}
注意三点:
- 必须卸载或禁用
Vetur,两者共存会直接导致语法高亮错乱、跳转失效 - 改完设置后要重启 VSCode,不是重载窗口
- 如果项目用了 TypeScript,还得装配套插件
TypeScript Vue Plugin (Volar),否则script setup区域的 TS 类型推导不完整
Vue 组件跳转失效?先查 @/ 别名是否被识别
在 template 中 Ctrl+点击组件名(比如 <usercard></usercard>)跳不到定义,大概率不是插件问题,而是路径别名没对上。
VSCode 要能解析 @/components/UserCard.vue 这种写法,得同时满足两个条件:
-
jsconfig.json或tsconfig.json里有正确配置:"baseUrl": "./", "paths": { "@/*": ["src/*"] } -
Path Intellisense插件已安装,并在settings.json中配了映射:{"path-intellisense.mappings": {"@": "${workspaceFolder}/src"}}
缺任一环,VSCode 都会把 @/ 当普通字符串处理,自然无法定位文件。验证方法:在 script 区域手动输入 import UserCard from '@/,看有没有路径提示弹出。
defineProps 类型没提示?检查 ESLint + eslint-plugin-vue 是否生效
defineProps 写完没类型推导、没参数补全、甚至 ESLint 报 'defineProps' is not defined,说明 Vue 特定规则没加载进来。
这不是 Volar 的责任,而是 ESLint 配置缺失导致的静态检查断层。必须确保:
- 项目本地装了
eslint、@vue/eslint-config-typescript(或@vue/eslint-config-recommended)和eslint-plugin-vue -
.eslintrc.cjs里启用了plugin:vue/vue3-recommended规则集 - VSCode 的 ESLint 插件已启用,且
settings.json中开了保存时修复:"editor.codeActionsOnSave": {"source.fixAll.eslint": true}
常见坑:全局安装 ESLint 但项目里没配规则文件,或者规则文件名写成 .eslintrc.js 却用了 CJS 导出语法,ESLint 直接静默失败。
Auto Import 导入错模块?关掉它对 vue 的自动补全
Auto Import 插件在 script setup 里输 ref,有时会错误地导入 vue/dist/vue.esm-bundler.js 而不是 vue 主入口,导致构建报错 Cannot resolve 'vue/dist/vue.esm-bundler.js'。
根本原因是它默认按文件路径匹配,而 vue 包的入口在 package.json#exports 里声明,Auto Import 看不见。解决办法是显式禁用它的 Vue 相关自动导入:
{
"auto-import.showImportSuggestions": false,
"auto-import.importStyle": "auto"
}
更稳妥的做法是:只用它处理非 Vue 内置 API 的导入(比如工具函数、自定义 hook),Vue 自带的 ref、computed、onMounted 全部靠 Volar 的原生补全——它知道该从哪导、导什么、要不要加 .value。
真正难调的是 Volar 和 TypeScript 插件之间的协同时机,有时候改了 tsconfig.json 但不重启 TS 服务,类型就卡在旧状态;这种“看起来都配对了,但就是不工作”的情况,比插件没装还费时间。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











