新闻详情

新闻详情

首页 / 资讯中心 / 详情

Vue项目中Vetur、ESLint、Prettier的配置与冲突解决

发布时间:2026/10/1 17:44:18来源:尧图网络
Vue项目中Vetur、ESLint、Prettier的配置与冲突解决
新拿到一个 Vue 项目第一件事就是折腾编辑器。VSCode 装好之后把 Vetur、ESLint、Prettier 这三件套配置明白几乎是每个前端入门的必经之路。这套配置说简单也简单不过就是装三个插件、写三个配置文件可偏偏有一堆人配完之后打开 .vue 文件满屏红色波浪线一保存代码就乱跳格式化结果和报错提示互相打架。这篇文章就把我在这套环境上踩过的坑、试过的配置方式、以及现在我自己项目里正在用的完整方案一次说清楚。看完之后你大概率能直接复制配置到自己的项目里省掉半天查来查去的功夫。说实话这三样东西本身都不难真正的难点在于让它们协作起来尤其是 ESLint 和 Prettier 这两兄弟。一个管代码质量一个管代码风格偏偏它们对“一行代码长什么样”都有自己的想法谁也不服谁。Vetur 又夹在中间既要给你提供 Vue 单文件组件的语法支持又要负责一部分格式化能力三个工具边界不清的时候就是你开始怀疑人生的时刻。所以这篇文章的核心思路很简单先给它们划清楚各自的职责范围再配置好协作规则最后把一切都串到“保存文件”这个动作上实现保存即自动修复、自动格式化。1. 先说清楚Vetur、ESLint、Prettier 到底是干什么的很多新手配置失败不是因为配置文件写错了而是根本没搞明白三个工具的分工。你觉得是在配三个插件其实你是在搭一条流水线。流水线上任何一个环节职责不清后面就会互相抢活、互相覆盖。1.1 VeturVue 单文件组件的“翻译官”Vetur 是 Vue 官方生态里最老牌的 VSCode 插件主要解决一个问题让 VSCode 认识.vue文件。Vue 的组件文件通常包含template、script、style三部分这三部分各自语法不同如果不装插件VSCode 看它就是一坨什么都像、什么都不像的文本。Vetur 把这三块分别丢给对应的语言解析器所以你才能在里面看到 HTML 标签的高亮、JS 的语法提示、还能获得组件属性和数据的补全。它和 VSCode 内置的 HTML、JavaScript 支持的关系有点像给一栋楼的每一层配了个翻译而 Pug、SCSS 这类扩展语法也能被它识别出来。不过这里要提醒一句Vetur 这两年已经停止积极维护官方推荐在 Vue 3 项目里改用 Vue Language FeaturesVolar。但如果你接手的是 Vue 2 项目或者暂时不想换工具链Vetur 依然是能稳定工作的选择。本文标题既然说的是 Vetur我就以它为主讲Volar 的配置思路其实大同小异。1.2 ESLint代码质量的“质检员”ESLint 是一款代码检查工具。它在启动时会把整个项目的 JS 代码解析成抽象语法树然后按照你配置的一组规则去检查这棵树。什么意思呢它关心的不是你的代码长得漂不漂亮而是有没有“病”。随便举几个例子定义了一个变量但从未使用过这是代码异味ESLint 能查出来写了一个全局变量但是忘了声明这在严格模式下会出问题ESLint 能查出来在if判断里用了而不是这可能引发类型转换的坑也能查出来。它做的是逻辑校验是所有项目长期维护时防止代码腐化的重要防线。ESLint 最强大的一点是规则体系极其灵活。你可以完全关闭某个规则也可以把规则的警告级别从 error 降为 warn甚至针对不同目录、不同文件类型启用不同的规则组合。这种灵活性是好事但它也带来了一个麻烦项目里如果没有一份明确的规则配置ESLint 本身也不知道该按什么标准来所以它必须搭配一套配置文件才能发挥作用。1.3 Prettier代码风格的“装修队”Prettier 是格式化工具它不关心代码逻辑对不对只看一行代码在视觉上是否一致、美观。缩进用几个空格字符串用的是单引号还是双引号行尾要不要加分号每行最多多少个字符就换行这些它都要管。你可以说它有点强迫症但强迫症对团队协作来说其实是优点。团队里十个人写代码有人喜欢单引号有人喜欢双引号有人写完不加分号有人句句加分号代码合并时 review 里全是这些无意义的风格差异。这时安排一个 Prettier 统一格式化所有人的代码在保存瞬间就变成同一套排版风格大家真正需要 review 的就只剩业务逻辑了。用一个生活化的类比来理顺思路Vetur 是汽车维修车间里的升降台让你能看见引擎全貌ESLint 是安全检测员检查刹车片有没有磨薄、油管有没有漏油Prettier 是洗车美容工负责把车身洗干净、内饰摆整齐。三者的关注点完全不重合但因为都要经过同一辆车配合不好就容易撞车。2. 动手安装从零到能跑起来的环境准备环境准备部分是纯体力的跟着步骤走就行。不过有几个版本和依赖选择的细节会直接影响后续配置是否顺利我尽量交代清楚。2.1 VSCode 插件层安装打开 VSCode 左侧的扩展市场搜索并安装以下三个插件Vetur发布者为 Vue.volar注意这里容易搞混Vetur 和 Volar 在同一组织下搜索时认准 Vue.veturESLint发布者为 MicrosoftPrettier - Code formatter发布者为 Prettier标识是 esbenp.prettier-vscode安装完别急着关重启一下 VSCode确保插件全部加载。装完后 VSCode 右下角偶尔会弹出提示“有多个格式化程序可用于 .vue 文件”这是正常现象后面配置settings.json时会通过设置默认格式化程序来消除这个提示。这里要特别注意VSCode 对工作区有一个安全机制如果你打开的是克隆下来的项目文件夹插件默认不会自动运行需要先信任该文件夹。首次打开时如果看到“Do you trust the authors of this folder?”的弹窗一定要选“Yes, I trust the authors”否则你会发现 ESLint 完全不工作各种提示全部消失。2.2 准备一个可用的 Vue 项目如果你手头已经有 Vue 项目这一步可以跳过。没有的话建议用官方脚手架快速创建一个练手项目。两种主流方式# 方式一Vue CLI适合 Vue 2 老项目 npm install -g vue/cli vue create my-vue-project# 方式二create-vue基于 Vite适合 Vue 3 新项目 npm create vuelatest my-vue-project用vue create创建项目时有一个交互式选项叫“Linter / Formatter”里面会问你是否安装 ESLint 和 Prettier以及选哪种配置集。很多人看到这里就开始犯选择困难症其实不用纠结主要看你想让 Prettier 暴露多少规则给 ESLint 去管。如果你希望保存时 ESLint 就能顺手把格式问题也修了就选那种带 Prettier 的组合配置。如果只是想让 ESLint 管逻辑、Prettier 管排版那就选标准的 ESLint 配置后面再手动集成 Prettier。用npm create vuelatest创建项目时也有一个交互式选项问到 ESLint 和 Prettier。它还和 Vue Router、Pinia、Vitest 等集成在一个多选列表里选项之间互相独立不存在“因为有 Vitest 就必须选 Prettier”的强制性关系。需要哪个勾哪个不需要的不要强行安装否则后面配置文件里多了一堆用不上的规则你还要一个个去核对。2.3 安装项目依赖npm 包层面插件层装好了项目层还需要装对应的 npm 包这两者千万不能混淆。VSCode 插件是编辑器能力npm 包是项目运行和命令行检查时依赖的库。很多新人只装了插件没装 npm 包结果项目里跑npm run lint时报“找不到模块”或者编辑器的 ESLint 插件的提示和命令行不一致。基础依赖如下直接复制到项目根目录执行npm install -D eslint eslint-plugin-vue eslint-config-prettier eslint-plugin-prettier prettier如果项目是用 Vue CLI 创建的建议再补一个官方封装的插件npm install -D vue/cli-plugin-eslint各个包的作用我用表格整理一下包名称作用eslintESLint 核心库提供检查引擎和命令行接口eslint-plugin-vueVue 官方的 ESLint 规则集让 ESLint 能理解 .vue 文件的 template 部分prettier格式化核心库eslint-config-prettier关闭 ESLint 中所有与 Prettier 冲突的格式类规则eslint-plugin-prettier把 Prettier 的格式化能力作为一个 ESLint 规则运行vue/cli-plugin-eslintVue CLI 的整合插件把 ESLint 集成到 vue-cli-service 中其中最关键的其实是eslint-config-prettier它专门用来“劝架”。ESLint 内置了一堆格式相关的规则比如引号风格、缩进、分号等这些规则和 Prettier 的格式化逻辑高度重叠。如果不关闭它们Prettier 刚把代码格式化成单引号ESLint 下一秒就报一个“Expected double quotes”的错误两个工具在编辑器里打得不可开交。这个包做的就是把这些重叠规则统一关闭把格式判断权完全让给 Prettier。3. 编写配置文件一份能直接用、不打架的配置配置文件是整个过程中最核心的部分。我把平时项目里实际在用的方案整理成三个文件分别管不同的侧重点。你可以直接参考但建议每一条都看明白再放进项目。3.1 ESLint 配置.eslintrc.js 逐字段拆解传统的 Vue 项目ESLint 配置文件一般是.eslintrc.js或.eslintrc.json。在项目根目录创建.eslintrc.js填入以下配置module.exports { root: true, env: { node: true, browser: true, es2021: true }, extends: [ plugin:vue/essential, eslint:recommended, prettier ], parserOptions: { ecmaVersion: 12, sourceType: module }, rules: { no-console: process.env.NODE_ENV production ? warn : off, no-debugger: process.env.NODE_ENV production ? warn : off, vue/multi-word-component-names: off } };逐条解释一下root: true表示这个文件是 ESLint 检查的根配置停止向父级目录继续寻找配置文件。这一点在 monorepo 或多子项目结构中很重要避免项目里的代码被上级目录或者其他项目的规则影响。env定义代码的运行环境。这里为什么要写browser: true因为你的项目里会有window、document这些浏览器全局对象如果不声明环境ESLint 会把它们当成未定义变量来报错。node: true则保证你在 Vue 配置文件、构建脚本里能使用process、module等 Node 全局对象。es2021: true是告诉 ESLint代码允许使用 2021 年发布的 ECMAScript 新语法特性。extends是三行配置中最容易迷惑的部分。它表示在官方推荐的基础上叠加插件规则。plugin:vue/essential是 Vue 官方规则集里一个偏保守的子集只开启那些会真正引发错误的规则比如模板里不允许出现非法语法。eslint:recommended是 ESLint 内置的推荐规则集覆盖了大部分常见的 JS 错误检查场景。最后的prettier就是上一节提到的 eslint-config-prettier这行负责关闭冲突规则。parserOptions中的ecmaVersion: 12对应 ES2021sourceType: module表示代码中使用的是 ES Module 语法也就是 import/export 那一套。这里其实在很多现代脚手架里会被babel/eslint-parser或者其他解析器接管如果你的项目使用了 TypeScript 或者更复杂的 Babel 配置通常还得指定parser字段。我们这里保持最简配置理解核心逻辑就够用。rules里的三条来自实际需求。no-console在生产环境警告开发环境则完全放开因为开发期间你本来就要频繁打 log 调试。no-debugger同理。vue/multi-word-component-names这条规则要求组件名至少两个单词这是为了保证组件名不会和 HTML 原生标签冲突但对一些像Home.vue、About.vue这类页面级单文件组件来说这条规则反而很烦人所以我一般直接关掉。3.2 Prettier 配置.prettierrc 常用参数对照在项目根目录创建.prettierrc文件填入以下配置{ semi: false, singleQuote: true, printWidth: 80, tabWidth: 2, trailingComma: es5, endOfLine: lf }这里有几个参数值得单独拿出来说因为它们对代码外观的影响最大也最容易引发团队讨论。semi: false表示行末不加分号。很多从 Java 或 C 转过来的同事对这个选项深恶痛绝但 JavaScript 的自动分号插入机制ASI本身是足够可靠的现代主流前端项目也普遍倾向无分号风格。和不和大家保持一致更多是团队约定问题没有绝对的对错。singleQuote: true表示字符串使用单引号。JS 社区里单引号、双引号的拥护者各占一半关键是不要一半一半混着用。有了 Prettier保存时自动统一谁也不用在 code review 时为了引号吵架。trailingComma: es5表示在对象、数组等数据结构中最后一项后面也加逗号。这个规则的收益在 git diff 里非常明显如果最后一个元素后面没有逗号下一次在这个元素后面再新增一行diff 会显示两行变动一行新增、一行被修改。如果提前加了逗号diff 就会干净地只显示新增的那一行review 起来舒服很多。下面是常用参数参考表格参数可选值默认值说明printWidth80~12080每行代码最大长度超出则自动换行tabWidth2 或 44缩进宽度semitrue/falsetrue行尾是否加分号singleQuotetrue/falsefalse是否使用单引号trailingCommaes5/none/allnone末尾逗号策略endOfLinelf/crlf/autolf行尾换行符类型endOfLine: lf这一条我要专门强调。Windows 系统默认使用 CRLF 换行符而 macOS/Linux 上使用 LF。如果项目是跨平台协作的Prettier 默认把行尾统一为 LF但 Git 在 Windows 上拉取代码时又常常添加回 CRLF这就会导致 ESLint 或 Prettier 在检查时报出“Delete ␍”之类的奇怪错误。这个坑我在第 5 节会展开讲。3.3 VSCode 的 settings.json把上面两个串起来前面两份配置文件一个管逻辑检查一个管格式化。现在需要在 VSCode 里把它们激活并且让它们跟随“保存文件”这个操作自动执行。打开 VSCode 设置快捷键 Ctrl,然后点击右上角的“打开设置(JSON)”图标在settings.json中填入以下内容{ editor.formatOnSave: true, editor.defaultFormatter: esbenp.prettier-vscode, eslint.validate: [ vue, javascript, html, javascriptreact ], editor.codeActionsOnSave: { source.fixAll.eslint: explicit }, vetur.validation.template: false, vetur.format.defaultFormatter.html: prettier, vetur.format.defaultFormatter.css: prettier, vetur.format.defaultFormatter.js: prettier, vetur.format.defaultFormatterOptions: { prettier: { semi: false, singleQuote: true } } }一条条来看。editor.formatOnSave: true表示保存时自动格式化。这是最终用户体验的核心所有人都希望代码一按 CtrlS 就变得整整齐齐。但如果你同时开启了 ESLint 的自动修复和 Prettier 的格式化它们之间是存在执行顺序的。通常是 ESLint 的 fix 先执行Prettier 的格式化后执行这样最终代码的风格以 Prettier 为准。editor.defaultFormatter设置为esbenp.prettier-vscode是告诉 VSCode当某类文件需要格式化时默认用 Prettier 插件。没有这一行VSCode 会弹窗问“选择默认格式化程序”你选错一次后面又会发现格式化和预期不一致。eslint.validate是 ESLint 插件在 VSCode 里生效的文件类型清单。Vue 文件必须显式添加vue否则 ESLint 插件压根不会去解析.vue文件你在template里的错误永远提示不出来。同理如果你项目里用了 TS还得加typescript和typescriptreact。editor.codeActionsOnSave里的source.fixAll.eslint表示保存时执行 ESLint 的自动修复动作相当于把命令行里的eslint --fix绑定到了保存操作上。这里有版本差异早期版本是true新版 VSCode 要求写成explicit两种写法我都见过如果你的 VSCode 对布尔值没反应就试试字符串形式。后面几行vetur.*开头的是针对 Vetur 的配置目的是不让 Vetur 内置的格式化器和 Prettier 抢活。如果这里不指定Vetur 会默认使用自己和 VSCode 自带的格式化逻辑去格式化 HTML、CSS 和 JS结果就是同样一段代码保存十次可能每次都变个样。显式把 Vetur 的各个格式化器都指向 Prettier就相当于统一了“谁动手来装修”的问题。注意settings.json 支持“用户级”和“工作区级”两种级别。个人习惯建议把 formatOnSave、defaultFormatter 放到用户级这类配置不会随项目变化把 eslint.validate、vetur.* 放到工作区级这样团队克隆你的项目时也能通过.vscode/settings.json文件共享这些设置。4. 解决三者冲突这才是真正的核心体验配置文件都写完不等于万事大吉很多项目就是配完了反而报错更多原因就是 ESLint 和 Prettier 在某些规则上“打架”。这是整篇文章里最值得花心思理解的部分。4.1 冲突的根源ESLint 和 Prettier 管的事情边界ESLint 的规则库里有相当大一部分是管格式的。比如quotes规则决定字符串用单引号还是双引号indent规则决定缩进是几格semi规则决定要不要分号。这些规则本身和 Prettier 的功能完全重叠。于是问题出现了。你写的是单引号字符串Prettier 检查没问题但 ESLint 的规则可能配置的是双引号。两个人同时给你标红你听谁的如果你只听 Prettier 的ESLint 的红线永远消不掉如果你听 ESLint 的Prettier 保存时又会改回去。这种互相覆盖的局面就是冲突的根源。我见过有人为了规避冲突又往 ESLint 规则里一条条去关闭所有格式类规则。这样做理论上可行但 ESLint 的格式规则数量非常多漏掉一条你都不知道而且每次 Prettier 升级可能还会引入新的规则变体。更明智的做法是用 sanji 通常推荐的组合既然 Prettier 是专业干格式化的那就让 ESLint 在格式这件事上彻底闭嘴只保留逻辑检查功能。4.2 两步解法eslint-config-prettier eslint-plugin-prettier这里有两种主流的整合方向我分别说明各自适用场景。方案一只关闭冲突规则不引入额外的“格式化规则”。做法是在.eslintrc.js的extends数组最后加一行prettier。这个方案只做一件事把 ESLint 和 Prettier 重叠的格式规则全部关闭。格式化完全交给 Prettier 插件去做ESLint 专心报逻辑错误。方案二把 Prettier 本身当作一条 ESLint 规则来用。做法是在extends中加入plugin:prettier/recommended。这个方案相当于把 Prettier 的检查结果直接映射成 ESLint 的错误或警告你在编辑器里看到的红线既是 ESLint 的报错也是 Prettier 的格式提醒。它更适合那些希望格式化问题也能在npm run lint阶段被拦下来的团队。两个方案的对比对比项方案一仅关冲突规则方案二prettier 作为 eslint 规则格式化执行者VSCode 的 Prettier 插件ESLint 内部调用 Prettier格式问题是否进 lint不会会配置复杂度低中保存时修复能力由插件分工决定由 codeActionsOnSave 决定适用场景VSCode 配好环境个人体验优先团队统一 lint 流程强制规范我个人现在的习惯是方案二因为它在团队协作里的约束力更强。格式问题一旦能在 lint 阶段暴露CI 或 Git 钩子里就能拦住不合规的代码合入仓库。而且plugin:prettier/recommended这个预设内部已经集成了 eslint-config-prettier不用再单独写一行prettier配置反而更简洁。如果选方案二那么.eslintrc.js的extends就长这样extends: [ plugin:vue/essential, eslint:recommended, plugin:prettier/recommended ]注意顺序plugin:prettier/recommended必须放在数组最后因为它就是一个“我需要末尾生效的覆盖规则”前面的规则如果有冲突都会被它覆盖掉。4.3 配置 Vetur 格式化避免和 Prettier 抢活如果你已经按要求把 Vetur 的几个format.defaultFormatter.*指向了 Prettier并且设置了editor.formatOnSave: true那么保存时 .vue 文件的所有区域都会交给 Prettier 统一处理Vetur 不会再横插一杠子。但有一个隐藏的坑多数人不知道.vue文件里的template部分Vetur 默认使用的格式化器是prettyhtml。它的格式化风格和 Prettier 有一些细微差异比如属性换行规则、自闭合标签处理。如果你发现保存之后模板部分和其他部分的格式风格不一致就是prettyhtml在作怪。解决方式就是我在配置里已经写好的vetur.format.defaultFormatter.html这个覆盖项。另外vetur.validation.template: false这行配置是我在经历过无数个“Vetur 报错但构建完全正常”的假警报后总结出来的。Vetur 对模板的校验规则有些是偏保守的比如动态组件的属性绑定偶尔会被它误报成不存在。这块校验能力其实是 ESLint 的eslint-plugin-vue更擅长所以我会让 Vetur 只负责语法高亮不做模板校验把校验的活交给更专业的插件去做。这也算是一种“让专业的人干专业的事”。5. 常见报错与排查实录配置过程不会一帆风顺下面这五个问题是几乎所有 Vue 新手也包括多年前的我都踩过的坑。我按实际出现的频率整理成速查表然后在表格后面对每个问题展开分析。报错或现象可能原因解决方案Parsing error: Unexpected token ESLint 没装 eslint-plugin-vue 或没在 extends 中启用安装依赖检查 plugin:vue/essentialDefinition for rule vue/html-self-closing was not foundeslint-plugin-vue 版本过旧或规则名不存在升级 plugin检查规则名xxx is not defined (no-undef)env 环境配置缺失在 .eslintrc.js 的 env 中补充Delete ␍ eslint(prettier/prettier)行尾换行符被识别为 CRLF在 .prettierrc 中设置 endOfLine: lf配置 .gitattributes保存后格式化没生效没有信任工作区或 defaultFormatter 未设置或 formatOnSave 没开信任文件夹设置 defaultFormatter 和 formatOnSave 为 true5.1 Parsing error: Unexpected token ESLint 解析不了模板这个报错最常出现在刚装完 ESLint但还没安装或启用eslint-plugin-vue的场景。ESLint 默认只认识纯 JavaScript 文件一旦在.vue文件里遇到template开头的尖括号就直接懵了按 JS 语法解析是一个没有对应操作数的奇怪符号。解决方式分两步先npm install -D eslint-plugin-vue装包然后在.eslintrc.js的extends里加上plugin:vue/essential。装完再重载窗口如果还有缓存导致的问题按CtrlShiftP执行 “Developer: Reload Window” 强制刷新。这个问题如果发生在 Vue 3 create-vue 项目上还需要检查一下你的解析器有没有正确指定部分场景下要配合babel/eslint-parser才能正常解析script setup语法。5.2 “Delete ␍”的噩梦CRLF 与 LF 换行符之争这个报错信息看起来很像乱码很多人第一次见到时直接被整懵。它的本质是换行符不统一。Windows 下按回车键产生的换行符是\r\nCRLF而 Unix/Linux/macOS 下是\nLF。当项目采用 LF你的编辑器却默认使用 CRLF 写文件时Prettier 就会在每个行尾看到一个多余的\r于是报出 “Delete ␍”。解决办法分两层。第一层是在.prettierrc里把endOfLine设为lf这表示 Prettier 检查时以 LF 为标准。第二层是在项目根目录创建.gitattributes文件写入* textauto eollf这么做Git 在 Windows 上检出文件时就不会自动把 LF 转回 CRLF从源头上解决跨平台协作时换行符反复横跳的问题。我自己在团队项目里加完.gitattributes之后这个报错基本就绝迹了。5.3 保存之后格式化没反应或者在右下角不停弹选择框这种状况基本可以按照三个顺序排查。先看editor.formatOnSave是否设置为 true再看editor.defaultFormatter是否为esbenp.prettier-vscode最后确认当前打开的文件是否能被 Prettier 识别为支持的类型比如.vue文件需要装 Vetur 或者 Volar否则格式化请求压根没有对应的处理者。有一种情况容易被忽略你在用户级设置里配置了formatOnSave: true但项目工作区里有.vscode/settings.json里面如果写了editor.formatOnSave: false工作区的优先级更高会把用户级彻底覆盖。遇到这种问题检查完用户级设置以后一定记得看看项目的.vscode/settings.json。5.4 ESLint 红色波浪线突然全部消失排除插件未启用、文件被 ignore 这些低级问题后最常见的原因是eslint.validate没有包含当前文件类型。比如你新写了一个.ts文件但之前配置的 validate 列表里只有javascript和vueESLint 插件就不会主动分析.ts文件。把它加进去就能恢复。另一个容易踩坑的点是eslint.workingDirectories配置。如果你在 monorepo 结构下工作每个子包有单独的.eslintrc那么 ESLint 插件必须知道它应该从哪个目录开始向上查找配置。配置不当会导致它在根目录找不到配置文件直接放弃检查表现就是所有 JavaScript 文件都安静得像没装过 ESLint 一样。5.5 Prettier 和 Vetur、ESLint 三方互相覆盖代码“跳来跳去”如果你保存一次代码看到内容变了好几次那基本可以确定两个格式化工具在交替工作。比如第一次保存时 Vetur 把 HTML 标签换行缩进了第二次保存时 Prettier 又把它合并成一行于是你看到代码在那里“跳舞”。这种现场需要先确认到底谁在格式化。一个可用的排查技巧是把formatOnSave暂时关掉然后一个个测试。你可以全选代码按AltShiftF手动触发“使用默认格式化程序格式化”看它是按 Prettier 风格还是按 Vetur 风格处理。这样就能确认editor.defaultFormatter是否真的设置正确。确认之后再打开 formatOnSave问题大概率就解决了。最后再分享一个实际体会这套配置刚调通的时候你会觉得它琐碎、多变甚至有点“玄学”。但顺手之后它会成为你开发流程里最可靠的隐形帮手。真正值得花时间理解的不是某个具体配置项而是三个工具的职责边界和协作方式。搞懂这些以后不管团队换 Volar 还是用 flat config或是一些新出的代码检查工具你都能很快迁移过去。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

小白也能入门大模型开发,掌握这三项技能,月薪轻松过3万! 2026/10/1 18:29:32

小白也能入门大模型开发,掌握这三项技能,月薪轻松过3万!

AI大模型开发岗位需求旺盛,薪资待遇优厚。入行关键在于掌握实操能力,特别是搭建RAG知识库、开发调试Agent智能体以及模型微调。文章强调实践项目的重要性,建议优先积累2-3个完整实战项目,并建议新人优先投递AI创业公司或传统企业新…

阅读更多 →
Compose Navigation 时序图深度拆解:背栈、生命周期与状态恢复全解析 2026/10/1 18:29:32

Compose Navigation 时序图深度拆解:背栈、生命周期与状态恢复全解析

最近在把团队里一个跑了三年的 Fragment 老项目整体切到 Jetpack Compose,别的都还好,唯独导航这块争议最大。有人说直接用原生 Navigation-Compose 就行,有人说要自己封装状态机,也有人说干脆用单一 Activity 自行管理页面状态。…

阅读更多 →
MFC对话框优化实战:尺寸适配、实时图表与卡顿排查全攻略 2026/10/1 18:29:32

MFC对话框优化实战:尺寸适配、实时图表与卡顿排查全攻略

对话框功能写好了,只能说能跑,离能用还好远。我最近正好在优化一个项目里的对话框模块,顺手把网上问得最多的几个问题都过了一遍——对话框太小、弹不出来、还有在现有VS MFC工程里让对话框显示实时图表。这篇就围绕“对话框已经写好&#xf…

阅读更多 →
麻雀搜索算法实现三维WSN覆盖优化:建模、仿真与实战 2026/10/1 18:29:26

麻雀搜索算法实现三维WSN覆盖优化:建模、仿真与实战

做无线传感器网络(WSN)部署相关研究的人,大概率绕不开"覆盖"这个词。前几年大家习惯在二维平面上做优化:把一片矩形区域均匀撒上网格点,再用粒子群、遗传算法把传感器节点坐标跑一遍,覆盖率从70%…

阅读更多 →
MUSIC算法实现三维DOA定位:双站交叉定位仿真与误差分析 2026/10/1 18:29:25

MUSIC算法实现三维DOA定位:双站交叉定位仿真与误差分析

做阵列信号处理的人对MUSIC算法一定不陌生,但说句实话,大多数演示代码都停留在二维平面上——一个均匀线阵,测一个方位角,画一张谱图,收工。这个例程不一样的地方在于,它把问题推到了三维:两个测…

阅读更多 →
OpenSpec实操:用结构化验收标准驱动AI编程,告别模糊需求 2026/10/1 18:29:19

OpenSpec实操:用结构化验收标准驱动AI编程,告别模糊需求

在 AI Coding 实战中,我越来越确信一件事:在提示词里把话说清楚,远不如把验收标准定明白。OpenSpec 正是冲着这个痛点来的——它把自然语言需求转成结构化的规格说明,让 AI 在动手写代码之前,先明确“要做什么”“怎么…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉