VSCode默认不自动格式化JavaScript代码,根本原因是未启用editor.formatOnSave或未将editor.defaultFormatter设为esbenp.prettier-vscode;必须在项目级.vscode/settings.json中明确配置这三项:"editor.formatOnSave": true、"editor.defaultFormatter": "esbenp.prettier-vscode"、"editor.detectIndentation": false,并确保右下角语言模式显示为“JavaScript”且绑定Prettier。

VSCode 默认不自动格式化 JavaScript 代码,装了插件也不起作用——根本原因通常是 editor.formatOnSave 没开,或者 editor.defaultFormatter 没指向 Prettier。
为什么 Prettier 是 JS 排版的首选格式化器
Prettier 不依赖 ESLint 规则,而是用固定、不可配置的“约定式”风格统一输出:单引号、2 空格缩进、末尾逗号、自动换行等。它不检查逻辑错误,只解决“怎么写才好看”,和 ESLint 职责分明。
- ESLint 做语义校验(比如变量未定义、循环引用),Prettier 只管排版
-
esbenp.prettier-vscode是目前最稳定、更新最勤的 Prettier 官方 VSCode 插件 - 它能处理
.js、.jsx、.ts、.tsx,甚至.vue中的<script></script>块 - 不推荐用
vscode-typescript作为 JS 默认格式化器——它对箭头函数、对象解构等现代语法排版不一致,且不支持.prettierrc
必须设置的三项核心配置
光装插件没用,得在项目根目录的 .vscode/settings.json 里写死这三条(不是用户级设置):
-
"editor.formatOnSave": true—— 保存即格式化,别指望手动按Shift+Alt+F -
"editor.defaultFormatter": "esbenp.prettier-vscode"—— 明确指定谁来干活,否则 VSCode 可能 fallback 到内置格式器 -
"editor.detectIndentation": false—— 关掉自动探测,避免开头几行空格/Tab 混用导致全文件缩进错乱
顺带补上缩进基础项:"editor.tabSize": 2 和 "editor.insertSpaces": true,确保 Tab 键插入的是空格而非制表符。
常见报错 There is no formatter for 'javascript' installed 怎么修
这个错误不是插件没装,而是 VSCode 没把 Prettier 绑定到 javascript 语言模式上。右下角状态栏点语言名(比如显示 “Plain Text” 或 “JavaScript React”),手动选成 “JavaScript”。
- 如果选了还是报错,检查
settings.json是否漏写了"editor.defaultFormatter",或写成了"editor.defaultFormatter.javascript"(这是旧写法,已弃用) - Vue 单文件组件中
<script></script>块需额外确认:Vetur 或 Volar 是否启用?若用 Volar,它默认接管.vue的 JS 部分,无需额外配置;若用 Vetur,则要在vetur.format.defaultFormatter.js设为"prettier" - 打开一个
.js文件,右键 →Format Document With→ 看列表里有没有Prettier;没有就说明插件没生效或语言模式不对
为什么 .prettierrc 必须放在项目根目录
VSCode 的 Prettier 插件会从当前打开文件的路径向上查找 .prettierrc(支持 JSON、YAML、JS 导出),找不到就用默认规则。团队协作时,这个文件就是排版契约。
- 关键字段示例:
"semi": true(加分号)、"singleQuote": true(单引号)、"trailingComma": "es5"(对象/数组末尾逗号) - 不要把
.prettierrc放进src/或子目录——它必须对整个工作区生效 - 如果项目同时用 ESLint,可加
"prettier.eslintIntegration": true(注意:该字段已在新版 Prettier 中废弃,改用 ESLint 的eslint-plugin-prettier)
真正容易被忽略的,是语言模式识别失败——哪怕所有配置都对,右下角显示 “Plain Text”,Prettier 就压根不会触发。每次新建文件或拖入旧脚本,第一件事就是点右下角选对语言。


















