ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vue3 开发只多装一个 VSCode 插件:Vue Volar extension Pack 配置与验证

Vue3 开发只多装一个 VSCode 插件:Vue Volar extension Pack 配置与验证 1. Vue3 项目里 VSCode 插件到底该装哪个如果你正在用 Vue3 写项目打开 VSCode 的扩展面板搜「Vue」大概率会看到两个名字很像的插件Vue Volar extension Pack 和 Vetur。很多人第一次装插件时随手点了 Vetur结果写script setup时类型提示时有时无模板里绑定的变量标红defineProps的参数点进去是any改半天代码也不知道问题出在编辑器还是自己写错了。这个场景的核心矛盾其实很简单Vetur 是为 Vue2 时代设计的插件它内置的模板解析和 TypeScript 处理逻辑跟 Vue3 的script setup、defineProps、defineEmits这套组合拳并不完全对齐。Vue 官方在 Vue3 推出后把语言支持拆成了 Volar 体系也就是现在的 Vue - Official旧称 Volar。而 Vue Volar extension Pack 是一个扩展包它把 Vue3 开发常用的一批插件打包在一起装一次就能覆盖语法高亮、模板类型检查、TS 接管、格式化等需求。所以这篇内容要解决的问题很具体在 Vue3 项目里怎么用 Vue Volar extension Pack 一次装好怎么在 settings.json 里把 Vetur 禁用掉、让 TypeScript 服务正确接管.vue文件以及装完之后怎么验证类型提示和模板校验真的生效了。适合刚从 Vue2 迁到 Vue3 的开发者也适合那些「插件装了但总觉得没生效」的人。下面按我实际配置的顺序来写每一步都能直接复制。2. 装扩展包之前先把 Vetur 处理干净Vue Volar extension Pack 本身是一个「扩展包」类型的插件安装它会自动带上几个依赖插件比如 Vue 语言特性支持、TypeScript 的 Vue 插件等。但这里有个前提如果你的 VSCode 里已经装了 Vetur必须先禁用它否则两个插件会同时尝试接管.vue文件的语言服务表现就是提示重复、跳转错乱、保存时格式化互相打架。操作路径是打开 VSCode 左侧扩展面板搜索Vetur点进插件详情页在「禁用」下拉里选择「禁用工作区」或直接禁用。如果你确定以后都不再用 Vue2 项目直接卸载也可以。禁用比卸载更稳妥因为有些老项目可能还需要临时切回去。禁用完 Vetur 之后再搜索Vue Volar extension Pack认准发布者是 Vue 官方相关的那一个点安装。安装完成后 VSCode 右下角可能会提示「重启以激活扩展」点重启。重启后你可以打开命令面板CtrlShiftP输入Developer: Show Running Extensions确认列表里 Vetur 是 disabled 状态而 Volar 相关插件是 activated。这一步看起来简单但实际踩坑最多。我见过有人装完 Volar 发现没效果最后查出来是 Vetur 还在工作区级别启用着两个插件抢同一个文件类型。所以顺序一定是先禁 Vetur再装扩展包最后重启。3. settings.json 可复制骨架Volar 启用与 TS 接管插件装好后真正决定体验的是工作区的.vscode/settings.json。Vue3 项目建议把配置写进项目根目录的.vscode/settings.json这样团队里每个人拉下来都是一致的不会出现「我这有提示你那没有」的情况。下面这份骨架可以直接复制我按功能分了段每段都标了作用。{ // 让 Volar 接管 .vue 文件的语言服务 vue.server.hybridMode: true, // 禁用 Vetur 的模板检查避免和 Volar 冲突 vetur.validation.template: false, vetur.validation.script: false, vetur.validation.style: false, // TypeScript 使用工作区版本保证和项目依赖一致 typescript.tsdk: node_modules/typescript/lib, typescript.enablePromptUseWorkspaceTsdk: true, // 让 Volar 的 TS 插件接管 .vue 里的类型检查 vue.server.includeLanguages: [vue], // 保存时用 Volar 格式化不用 Vetur [vue]: { editor.defaultFormatter: Vue.volar }, // 模板里也开启类型提示 vue.inlayHints.missingProps: true, vue.inlayHints.inlineHandlerLeading: true, // 关闭 Vetur 对 .vue 的格式化接管 vetur.format.enable: false }这里有几个参数值得单独说。vue.server.hybridMode设为 true 是让 Volar 在混合模式下工作对大多数 Vue3 项目兼容性更好。typescript.tsdk指向项目本地的 TypeScript而不是 VSCode 自带的版本这一步很关键——如果你项目里装的是 TypeScript 5.x而 VSCode 内置的是旧版本类型提示就会出现「明明类型对却报错」的怪现象。typescript.enablePromptUseWorkspaceTsdk设为 true 后VSCode 会弹窗问你要不要用工作区版本选「允许」即可。vue.server.includeLanguages确保.vue文件被纳入 Volar 的语言服务范围。[vue]段里的editor.defaultFormatter指定用 Volar 格式化避免保存时 Vetur 跳出来抢活。最后vetur.format.enable设为 false 是双保险即使 Vetur 没完全禁用也不让它格式化。如果你用的是 pnpm 或 yarn 的 PnP 模式node_modules/typescript/lib路径可能不存在这时候需要改成实际的 TS 路径或者用typescript.tsdk指向.yarn/sdks/typescript/lib。这个细节后面排障部分会再提。4. 新建 .vue 文件验证类型提示与模板校验配置写完后别急着关掉 settings.json先做一次验证确认 Volar 真的在工作。验证分三步类型提示、模板校验、跳转定义。第一步在src/components下新建一个DemoCard.vue写入下面这段代码script setup langts interface User { id: number name: string email?: string } const props defineProps{ user: User count: number }() const emit defineEmits{ (e: update, id: number): void }() function handleClick() { emit(update, props.user.id) } /script template div classcard h3{{ user.name }}/h3 p{{ user.email }}/p button clickhandleClick更新 {{ count }}/button /div /template写完后把鼠标悬停在props.user上应该能看到User类型的完整结构提示包括id: number、name: string、email?: string。如果只显示any或者没有提示说明 TS 服务没接管成功回到 settings.json 检查typescript.tsdk路径。第二步验证模板校验。在template里故意把user.name改成user.nickname这时 Volar 应该在这个变量下方画红色波浪线悬停提示类似「Property nickname does not exist on type User」。这就是模板类型检查生效的标志。如果没有任何报错说明模板校验没开检查vue.server.hybridMode和vue.server.includeLanguages是否配置正确。第三步验证跳转。按住 CtrlmacOS 是 Cmd点击模板里的handleClick应该能直接跳到script setup里的函数定义。点击user.name里的name应该跳到User接口的name字段。跳转正常说明语言服务已经完整接管。这三步都通过后你可以在终端跑一次vue-tsc --noEmit确认命令行类型检查和编辑器提示一致。如果编辑器不报错但vue-tsc报错通常是 VSCode 用的 TS 版本和项目不一致回到typescript.tsdk那一段处理。5. 本篇常见错排查Vetur 残留与 TS 版本不一致配置过程中最容易遇到三类问题我按出现频率排一下。第一类是 Vetur 残留导致的提示冲突。表现是.vue文件里同一个变量出现两条提示或者保存时格式化结果每次不一样。排查方法是打开命令面板运行Developer: Show Running Extensions看 Vetur 是否还在 activated 列表里。如果在说明工作区级别的禁用没生效去.vscode/settings.json里加一行vetur.enable: false然后重启 VSCode 窗口不是重启整个编辑器用Developer: Reload Window更快。第二类是 TypeScript 版本不一致。表现是编辑器里类型提示正常但终端vue-tsc报一堆类型错误或者反过来。根因是 VSCode 内置 TS 版本和项目node_modules/typescript版本不同。解决方式是确认typescript.tsdk指向的路径真实存在然后在 VSCode 里按 CtrlShiftP 输入TypeScript: Select TypeScript Version选择「Use Workspace Version」。选完后右下角会显示当前使用的 TS 版本号和package.json里对得上就对了。第三类是defineProps泛型不识别。表现是写了defineProps{ foo: string }()但foo在模板里提示不存在。这通常是 Volar 版本过旧或者项目里同时装了volar/vue-language-plugin-prettier之类的旧包。处理方式是升级 Vue Volar extension Pack 到最新版然后检查package.json里有没有残留的 Volar 旧依赖有就删掉重新pnpm install。还有一个不太常见但会遇到的monorepo 里 TS 路径解析错乱。表现是子包的.vue文件提示找不到父包的类型。这时候需要在项目根目录的tsconfig.json里配好paths并确保 VSCode 打开的是根目录而不是子包目录。Volar 的 TS 插件会读取最近的tsconfig.json打开错目录就会用错配置。6. 把配置固化下来后续接入更省事上面这套配置跑通后建议把.vscode/settings.json提交到 Git 仓库同时在.vscode/extensions.json里加上推荐插件这样团队新人拉下代码后 VSCode 会直接提示安装 Vue Volar extension Pack不用再口头交代「别装 Vetur」。{ recommendations: [ Vue.volar ], unwantedRecommendations: [ octref.vetur ] }unwantedRecommendations这一项会提示用户不要装 Vetur从源头上减少冲突。如果你后续要在项目里接入模型能力做代码补全或对话式调试可以先把 API Key 和接入文档准备好模型对话入口在 https://taotoken.net/api-keys 接入文档在 https://taotoken.net/doc 需要长期跑编码任务或 Agent 的话可以看 Coding Planhttps://taotoken.net/coding-plan 。这些和 Volar 配置不冲突属于项目跑起来之后的下一步。回到插件本身Vue Volar extension Pack 的价值就在于「一次装好、少踩坑」。它把 Vue3 开发需要的语言服务、TS 接管、模板校验打包在一起你只需要做两件事禁掉 Vetur写好 settings.json。剩下的类型提示和模板校验新建一个.vue文件就能验证。如果验证时发现提示不对优先查 Vetur 是否残留、TS 版本是否一致这两个点覆盖了绝大多数问题。
返回列表