Prettier 默认不处理 Vue SFC 的 script 和 style 块,需手动启用 vueIndentScriptAndStyle 或安装 @prettier/plugin-vue;ESLint 与 Prettier 冲突时应禁用 ESLint 格式化能力,由 Prettier 接管保存格式化。

Prettier 默认不处理 Vue SFC 的 <style></style> 块,除非你手动启用 prettier.vueIndentScriptAndStyle 或安装 @prettier/plugin-vue
ESLint 和 Prettier 冲突时,不是插件装错了,而是配置没对齐:必须禁用 ESLint 的格式化能力("eslint.format.enable": false),再让 Prettier 接管保存时的格式动作
Path Intellisense 在 Vue 3 + Vite 项目里默认不识别 @/ 别名,得靠 jsconfig.json 或 tsconfig.json 里的 baseUrl 和 paths 配置驱动,否则跳转仍会落到 node_modules 里同名但无关的包中
Volar 是 Vue 3 的事实标准,Vetur 已停更;但 Volar 启动时若检测到项目含 vue-template-compiler,会主动降级为兼容模式,导致 defineProps 泛型推导失效——删掉旧依赖才能解锁完整类型支持
别急着装满10个插件,先盯住这4个真实卡点
为什么 Prettier 格式化后代码还是乱?
常见错误现象:npm run dev 正常,但保存后 .vue 文件的 <script setup></script> 缩进错位、<style scoped></style> 里 CSS 属性换行异常
- 确认已安装
@prettier/plugin-vue,并确保prettier.config.js中启用了它:plugins: ['@prettier/plugin-vue'] - Vue SFC 的 script 和 style 默认不缩进,需显式开启:
vueIndentScriptAndStyle: true - 若用 TypeScript,
prettier不处理类型语法,interface或泛型写法不会被重排——这是设计使然,不是 bug
Path Intellisense 跳转失败,到底该配什么?
使用场景:在 import { useUser } from '@/composables/user' 中按 Ctrl+Click,结果跳进 node_modules/@types/vue
- 必须有
jsconfig.json(JS 项目)或tsconfig.json(TS 项目),且含"compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["src/*"] } } - VS Code 设置中关闭原生路径提示:
"javascript.suggest.paths": false和"typescript.suggest.paths": false - Vite 项目还需加一行:
"volar.ignoreProjectWarning": true,否则 Volar 可能拦截路径解析逻辑
Volar 类型推导失效,是不是该换回 Vetur?
错误现象:defineProps() 写完后,props.msg. 没智能提示;ref 或 computed 的返回值类型显示为 any
- 检查
package.json是否残留vue-template-compiler——Volar 见到它就自动切降级模式 - 确保
vue版本 ≥ 3.3,且@vue/language-core是最新版(Volar 依赖它做 TS 插件集成) - 重启 VS Code 后,打开一个
.vue文件,看右下角状态栏是否显示 “Vue (Volar)”;若显示 “Vue (Vetur)”,说明插件冲突或未启用
ESLint 报红但运行正常,关掉又怕漏 Bug?
典型场景:TS 中写了 const a = {} as any,ESLint 提示 “unsafe cast”,但业务需要临时绕过
- 不要关整个规则,用行级注释精准抑制:
// eslint-disable-next-line @typescript-eslint/no-explicit-any - 全局禁用格式类规则:
"eslint.options": { "rules": { "indent": "off", "quotes": "off" } },把格式交给Prettier - CI 流程中仍保留
eslint --ext .ts,.tsx src/,编辑器里只开错误/警告类检查(如no-unused-vars、no-undef)
最易被忽略的一点:插件是否启用,取决于你当前打开的是文件夹还是工作区。单文件打开时,settings.json 里的 "extensions.autoUpdate": false 可能让你错过关键更新;而团队项目必须用 .code-workspace 文件声明推荐插件,否则新成员 clone 后第一眼看到的,是没装任何插件的“裸”编辑器


















