根本原因是volar未启用take over mode或.vue文件未被识别为vue语言模式;需手动切换右下角语言模式为vue、设置"volar.takeovermode": true、彻底卸载vetur、在项目级settings.json中配置"files.associations": {"*.vue": "vue"}并重启vscode。

Vue 文件在 VSCode 里显示为纯文本、<script setup></script> 里 defineProps 报红、<template></template> 标签没颜色——不是插件没装,是 Volar 没真正接管,或者语言模式根本没生效。
为什么装了 Volar 还是没高亮
常见错误现象:打开 .vue 文件,右下角显示的是 Plain Text 或 HTML,不是 Vue;<style scoped></style> 里 CSS 有高亮,但 <script setup></script> 像 JS 文件一样灰着;ref() 能跳转,defineProps 却提示 “cannot find name”。
根本原因只有两个:
– Volar 没启用 Take Over Mode,只当普通 TS 插件用
– VSCode 没把 .vue 当 Vue 类型处理,连语言服务都没启动
- 手动点右下角语言模式 → 选
Vue(若没这个选项,说明 Volar 未激活或被 Vetur 压制) - 在
settings.json中加:"volar.takeOverMode": true - 确保已卸载
Vetur(不是禁用,是彻底卸载;两者共存时 VSCode 会自动禁用 Volar) - 重启整个 VSCode 窗口(
Developer: Reload Window不够,必须关掉再重开)
如何验证 Volar 是否接管成功
不能只看标签有没有颜色——那可能是 HTML 高亮在撑场面。关键要看类型系统是否就位。
典型使用场景:
– 在 <template></template> 里写 {{ count }},把光标停在 count 上,按 F12 能跳转到 const count = ref(0) 的定义处
– 在 <script setup></script> 里输入 defineProps,能自动补全类型提示,而不是只出括号
- 检查项目根目录是否有
tsconfig.json或jsconfig.json;没有就创建一个最简版:{"compilerOptions": {"types": ["vue"]}} - 确认
typescript.tsdk指向项目本地的node_modules/typescript,不是全局版本 - 如果用 pnpm,运行
pnpm store path查路径,再检查 VSCode 是否有读取权限(macOS 上偶发拦截)
files.associations 配置为什么总失效
明明写了 "*.vue": "vue",新文件还是识别成 HTML——这不是配置错了,是它被覆盖或没落到正确层级。
参数差异很关键:
– 用户级设置(全局)会被工作区设置(.vscode/settings.json)覆盖
– 如果项目里已有 .vscode/settings.json,必须在里面显式写一遍 files.associations
– files.associations 只匹配后缀,不认文件内容;哪怕文件里全是 Vue 语法,后缀不是 .vue 也无效
- 优先在项目级
.vscode/settings.json中配置:"files.associations": {"*.vue": "vue"} - 避免写成
"*.vue.html"或漏掉引号(*.vue必须带引号) - 改完后新开一个
test.vue文件验证,不要在已打开的旧文件上测试
Volar Server Mode 设成 embedded 还是 external
高亮正常但智能提示卡顿、切换文件时 CPU 突增、defineEmits 提示延迟明显——这是 Volar 默认用 embedded 模式启动独立 TS 服务导致的资源竞争。
性能影响很实际:
– embedded:Volar 自带轻量 TS 服务,启动快,小项目够用,但大项目易卡
– external:复用项目本地 node_modules/typescript,内存占用低,类型推导更稳,但首次启动稍慢
- 在设置中搜
Volar > Server: Mode,改为external - 改完必须重启 VSCode 窗口(热重载不触发服务重建)
- 如果项目用 TypeScript 5.4+,且
tsconfig.json启用了"vueCompilerOptions",external模式才能完整支持模板类型校验
最容易被忽略的其实是 takeOverMode 和 files.associations 的组合效果——它们不依赖插件数量,但缺一不可;一旦漏掉,Volar 就退化成“只高亮 HTML”的旁观者,连 <script lang="ts"></script> 都不会触发 TS 解析。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











