vscode 高效开发 vue3+vite+ts 项目需同时启用 volar(禁用 ts 内置 .vue 支持)、vue-tsc 全量类型检查(配 target: 3)、eslint+prettier 职责分离,三者缺一不可且不可互相覆盖。

直接上结论:VSCode 要真正支撑 Vue3 + Vite + TypeScript 项目高效开发,必须同时启用 Volar(非旧版 Vetur)、vue-tsc 全量类型检查、ESLint + Prettier 协同格式化,且三者不能互相覆盖配置。只装插件或只配脚本,都会漏掉关键校验环节。
为什么 Volar 是唯一推荐的 Vue 插件(不是 Vetur)
Vetur 已明确弃用,它不支持 Vue 3 的 defineComponent 类型推导、defineProps 宏类型绑定,也无法识别 script setup 中的泛型参数。Volar 才是 Vue 官方维护的现代语言服务器,但要注意:
- 必须禁用 VS Code 内置的 TypeScript 插件对
.vue文件的接管:在设置中搜索typescript.preferences.includePackageJsonAutoImports,设为off;再打开命令面板(Ctrl+Shift+P),执行Vue: Toggle Vue Language Features确保开启 -
Volar只做「当前打开文件」的实时提示,它不会发现未打开组件里引用的类型错误——这点常被忽略,导致上线前才发现类型崩了 - 若项目用了
path alias(如@/components),需在jsconfig.json或tsconfig.json的compilerOptions.paths中显式声明,否则 Volar 无法跳转
vue-tsc --noEmit 是唯一可靠的全项目类型检查方式
vue-tsc 是基于 TypeScript 编译器改造的专用工具,能正确解析 .vue 文件中的 setup、defineProps、defineEmits 等宏的类型语义。它和 Volar 的检查逻辑不同源,互补性强:
- 必须在
tsconfig.json中设置"vueCompilerOptions": { "target": 3 },否则defineProps泛型会报错Type 'unknown' is not assignable to type 'string' - 运行
vue-tsc --noEmit --watch时,若控制台卡住没输出,大概率是tsconfig.json里漏了"include": ["src/**/*"],导致它没扫描到任何文件 - 不要把
vue-tsc和tsc混用:tsc完全不认识.vue,会直接跳过,造成「类型看似没问题,实际运行就崩」
ESLint + Prettier 协同必须绕开配置冲突
常见错误是把 eslint-plugin-prettier 当成「自动修复格式」的万能开关,结果代码越修越乱。真实协作链路是:ESLint 检查逻辑规范(如 no-unused-vars),Prettier 管排版(缩进、换行),二者职责必须隔离:
-
eslint.config.ts中extends列表末尾必须加"prettier",且仅此一处;如果还加了"plugin:prettier/recommended",会导致规则重复定义,保存时格式反复横跳 - VS Code 的
editor.formatOnSave必须指定为esbenp.prettier-vscode,不能设为 ESLint 插件——后者只会调用eslint --fix,对 JSX/模板语法无效 -
.prettierrc里不要写"semi": true如果 ESLint 规则已强制分号,否则eslint-plugin-prettier会报冲突警告Expected semicolon
husky + lint-staged 防止问题代码提交
本地开发时靠人手动跑 npm run type-check 或 npm run lint 不现实,必须让 Git 提交前自动拦截:
- 用
npx husky-init初始化后,在.husky/pre-commit里写:npx lint-staged -
lint-staged配置要分层:对*.{js,ts,tsx,vue}运行eslint --fix,对*.{json,yml,md}运行prettier --write,对src/**/*.{ts,vue}单独加vue-tsc --noEmit——注意这里不能用--watch,否则钩子会卡住 - 如果
pre-commit钩子报错command not found: vue-tsc,说明lint-staged没走项目本地 node_modules,需在脚本开头加export PATH="./node_modules/.bin:$PATH"
最关键的盲区是:Volar 提示正常 ≠ 类型安全,ESLint 不报错 ≠ 代码可维护,Prettier 格式化成功 ≠ 提交前校验完整。三个环节缺一不可,且必须各自守住边界——比如让 Prettier 碰逻辑规则,或让 ESLint 去管 JSX 换行,都会引发不可预测的覆盖行为。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











