必须禁用Vetur,因Volar与Vetur底层架构不兼容,共存会导致defineProps报错、跳转失效、emits不识别;Volar专为Vue3设计,需禁用Vetur、手动关联.vue为Vue语言模式、配置tsconfig.json包含"vue"类型声明并重启TS服务。

Vue 3 项目里 Volar 和 Vetur 同时启用,defineProps 报错、跳转失效、emits 不识别——这不是代码写错了,是插件冲突了。
禁用 Vetur 是硬性前提,不是可选项
VS Code 默认可能同时激活 Vetur 和 Volar,但它们解析 .vue 文件的方式根本不同:Vetur 面向 Vue 2,Volar 才专为 Vue 3 的 setup() 和类型推导设计。两者共存会导致语言服务“打架”,比如:
-
defineProps被标红,提示 “not defined”,实际是 Vetur 没法解析组合式 API - Ctrl+Click 点击组件名跳不到源码,因为 Vetur 的语义分析层被 Volar 绕过
- 模板里
v-model或on:click的类型提示消失
实操建议:
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
- 打开扩展面板,搜
Vetur,点击「禁用」(不是卸载) - 确认已安装官方
Volar插件(作者:Vue Team),并在工作区启用 - 在项目根目录加
.vscode/settings.json,强制关联:{"files.associations": {"*.vue": "vue"}} - 执行
Developer: Reload Window,否则旧缓存仍走 Vetur 解析器
ESLint 报 ref 未定义?解析链断了
用 @typescript-eslint/parser 处理 .vue 文件时,如果不告诉 ESLint “<script setup> 里的内容要交给 TypeScript 处理”,它就会当成纯 JS 解析,自然不认识 ref、defineProps 这些顶层绑定。
立即学习“前端免费学习笔记(深入)”;
实操建议:
- 在
.eslintrc.cjs的parserOptions中必须包含:{ parser: '@typescript-eslint/parser', extraFileExtensions: ['.vue'] } - 确保已安装
@typescript-eslint/eslint-plugin和eslint-plugin-vue,且extends包含'plugin:vue/vue3-recommended' - 如果用了
unplugin-vue-components自动导入,ESLint 不会自动感知,需在globals中显式声明:{ ref: 'readonly', reactive: 'readonly', defineProps: 'readonly' }
Auto Rename Tag 在 <script setup lang="ts"> 里容易误操作
老版 Auto Rename Tag 会把 <MyButton> 当成 HTML 标签重命名,但在 <script setup> 里,MyButton 可能是变量或组件名,强行联动改关闭标签会破坏 TS 类型或导致编译失败。
实操建议:
- 直接卸载
Auto Rename Tag - 用 VS Code 内置的
Auto Close Tag(默认开启),它只管<div>→</div>,不碰 JS/TS 变量名 - 需要模板内属性补全?开 Volar 的
Volar: Enable Take Over Mode(命令面板搜),它会接管整个<template>的语言服务 - 别装
Vue Helper、Vue Peek这类小众插件,它们和 Volar 的语义分析层重复,容易引发内存暴涨或光标卡顿
插件不是越多越好,关键路径要干净
前端开发中真正高频的动作就几条:打开文件 → 编辑 → 保存 → 格式化 → Lint → 运行 → 调试。每多一个插件,就多一层进程隔离、一次初始化、一个潜在冲突点。
比如:
-
Prettier和ESLint都配了保存时格式化,结果互相覆盖,缩进混乱 -
Live Server和项目自带的vite dev同时跑,端口冲突或热更新失效 - 多个图标主题插件(如
vscode-icons+Material Icon Theme)竞争,导致文件树图标错乱
复杂点在于:有些冲突不会立刻报错,而是表现为“偶尔跳转失败”“有时格式化不生效”“某天突然 CPU 占用飙升”。这类问题往往要关掉一半插件再逐个开,才能定位到那个安静作祟的“幽灵插件”。

















