VSCode保存时自动排版需插件、配置、语言模式三者对齐;离线Vue项目须确保Vetur、Vue CLI、Prettier等本地可用,否则formatOnSave无效。

VSCode 保存时自动排版不会“自己动起来”,必须同时满足插件、配置、语言模式三者对齐;离线维护 Vue 项目时,Vetur 和 Vue CLI 的本地可用性比格式化设置更关键——没它们,editor.formatOnSave 再开也没用。
editor.formatOnSave 开了却没反应?先看右下角语言标识
VSCode 不会凭空格式化,它只对当前语言模式(Language Mode)启用对应格式化器。如果打开 .vue 文件后右下角显示的是 Plain Text 或 HTML,Prettier 或 Vetur 都不会触发。
- 点右下角语言标识 → 选
Vue(不是Vue HTML或JavaScript React) - 若没有
Vue选项,说明 Vetur 插件未安装或未启用;离线环境需提前下载Vetur的.vsix文件手动安装 - 检查
settings.json中是否写了"[vue]": { "editor.defaultFormatter": "octref.vetur" }—— 注意是octref.vetur,不是esbenp.prettier-vscode,后者对<template>和<style>支持有限
Prettier + Vetur 混用时,.prettierrc 只对 <script> 生效
Vetur 默认把 .vue 文件拆成三块处理:<template> 用 html 格式化器,<style> 用 css 格式化器,<script> 才走 javascript 链路并读取 .prettierrc。所以你在 .prettierrc 里设的 semi、singleQuote 只影响脚本区。
-
<template>对齐靠vetur.format.options.wrapAttributes控制,比如设为"force-aligned-multiple"才能让多属性垂直对齐 -
<style>区域若用 SCSS,需额外装mrmlnc.vscode-scss并配"[scss]": { "editor.defaultFormatter": "mrmlnc.vscode-scss" } - 离线时
.prettierrc必须放在项目根目录,且文件名不能带后缀(不是.prettierrc.json),否则 Vetur 不识别
离线 Vue 项目无法格式化?优先确认 dartfmt / vue-cli / prettier 是否真在本地
VSCode 的格式化本质是调用外部命令:Vetur 调 prettier(JS)、vls(Vue Language Server);Vue CLI 创建的项目若含 eslint-plugin-vue,还会触发 ESLint 的 --fix。离线环境下,这些二进制或依赖包缺一个,保存就静默失败。
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
立即学习“前端免费学习笔记(深入)”;
- 打开 VSCode 内置终端,运行
npx prettier --version,无输出说明项目没装prettier(devDependencies里没它,或离线安装时漏了) - 运行
vue --version,报错则 Vue CLI 未离线部署成功;应提前在有网机器上执行npm pack @vue/cli,再在离线机用npm install -g xxx.tgz - 若用 Volar 替代 Vetur(Vue 3 推荐),离线安装必须包括
Vue Server的二进制(node_modules/@volar/vue-language-server/bin/vue-language-server.js),否则formatOnSave直接跳过
大文件保存卡顿或超时?别等它自己好,显式加 timeout
Vue 单文件组件常含大量模板和样式,尤其带内联 SVG 或长 JSON 的 <script setup>,Prettier 处理可能超时,默认 750ms 就中断,导致保存后代码“半格式化”——看着整齐了,但尾逗号没加、换行没对齐。
- 在
settings.json加一行:"editor.formatOnSaveTimeout": 5000(单位毫秒) - 不建议全局设太高,可改用语言专属配置:
"[vue]": { "editor.formatOnSaveTimeout": 5000 } - 若仍卡死,关掉 Vetur 的模板校验:
"vetur.validation.template": false,它和格式化共用同一语言服务通道,容易争抢资源
真正难的不是配开关,而是让所有环节在离线状态下都“有东西可调”——插件、CLI、格式化器二进制、配置文件路径,四者断一不可用。调试时别只盯设置,先敲几条命令确认底层工具链是否真实存在。

















