Volar与Vetur冲突导致Vue代码提示失效:Volar禁用Vetur但其残留仍注册激活事件,需彻底卸载Vetur、确认右下角语言模式为“Vue (Volar)”、补全shims-vue.d.ts声明及tsconfig路径映射,并重启TS服务。

VSCode 里 Vue 组件能正常 import,但没代码提示、跳转失效、甚至报 Cannot find module '*.vue',根本不是网络问题,而是插件环境冲突或类型声明缺失导致的——离线场景下尤其明显。
为什么 Volar 和 Vetur 会同时存在却互不生效
Volar 是 Vue 3 官方推荐的 TypeScript 支持插件,Vetur 则是 Vue 2 时代的老将。两者在 VSCode 中不能共存:Volar 会主动禁用 Vetur 的语言服务,但如果你手动装过 Vetur(比如旧项目残留),它可能仍注册了 onLanguage:vue 激活事件,导致 Volar 的激活被阻塞。
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Toggle Developer Tools,切到 Console 标签页,搜索Activating extension 'vue.volar'—— 若看到failed或conflict,大概率是 Vetur 占位未释放 - 检查扩展列表,禁用所有带
vetur字样的插件(如octref.vetur),并确认已卸载(不只是禁用) - 重启 VSCode 后,再打开一个
.vue文件,观察右下角语言模式是否显示为Vue (Volar),而不是Vue或Vue (Vetur)
shims-vue.d.ts 缺失或路径不对,TypeScript 就“看不见” .vue 文件
VSCode 的提示依赖 TypeScript 的类型解析,而 TS 默认不识别 *.vue 后缀。即使你离线,只要项目根目录下没有正确的声明文件,import Comp from './Comp.vue' 就永远只是“字符串路径”,不会触发组件类型推导。
- 确保项目根目录(即含
tsconfig.json的地方)存在src/shims-vue.d.ts(Vue CLI 项目)或shims-vue.d.ts(Vite 项目),内容必须包含:
declare module '*.vue' {
import { DefineComponent } from 'vue'
const component: DefineComponent<{}, {}, any>
export default component
}
- 如果用了别名(如
@/components/xxx.vue),还需在tsconfig.json的compilerOptions.paths里配好映射,否则 TS 无法 resolve 别名路径 - 修改后务必重启 TS 服务:按
Ctrl+Shift+P→ 输入TypeScript: Restart TS server
离线时插件安装失败,本质是残留文件锁死了新版本
离线环境下无法自动拉取远程依赖或校验签名,VSCode 安装 Vue (Official) 插件失败,90% 是因为 .vscode/extensions/ 目录里还躺着旧版 vue.volar 或 vue.vscode-typescript-vue-plugin 的半解压文件夹——这些文件夹可能权限异常、名字带 .incomplete、或内部 package.json 声明的 Node API 版本与当前 VSCode 不兼容。
立即学习“前端免费学习笔记(深入)”;
- 完全退出 VSCode(任务管理器里确认
Code Helper、Code进程都已结束) - 进入扩展目录:
%USERPROFILE%\.vscode\extensions\(Windows)或~/.vscode/extensions/(macOS/Linux) - 删除所有含
vue.或volar的文件夹(例如vue.volar-1.12.1、johnsoncodehk.volar-1.15.0) - 重新打开 VSCode,用命令面板运行
Extensions: Install from VSIX,选你提前下载好的vue.volar-*.vsix包(注意版本号 ≥ 1.14.0 才完整支持 Vue 3.4+)
真正卡住离线开发的,往往不是“没网”,而是旧插件残留 + 类型声明路径错位 + TS 服务没重启这三件事叠在一起。每一步都得手动确认状态,不能只看插件列表里显示“已启用”。


















