Shift+Alt+F没反应的主因是Prettier未接管.js文件:VS Code默认用TypeScript语言服务而非Prettier,需在settings.json中为[javascript]精确配置"editor.defaultFormatter": "esbenp.prettier-vscode",并确保项目已安装prettier包及正确.prettierrc配置。

Shift+Alt+F 按下没反应?先确认 Prettier 已接管 .js 文件
VS Code 默认不格式化 .js 文件,它用的是内置的 TypeScript 语言服务(vscode.typescript-language-features),哪怕你装了 Prettier 插件也不会自动生效。按下 Shift+Alt+F(Windows/Linux)或 Shift+Option+F(macOS)没反应,大概率是这个原因。
检查右下角状态栏:打开一个 .js 文件,若显示 “JavaScript” 或 “Plain Text”,说明语言模式识别正常;但若显示 “ESLint” 或 “None”,就表示 Prettier 没绑定成功。
- 必须在
settings.json中为[javascript]单独配置,不能只写全局"editor.formatOnSave": true - 格式化器 ID 必须精确写成
"esbenp.prettier-vscode",写成prettier、prettier-vscode或漏掉-vscode都会失败 - 快捷键是否生效,取决于当前文件的语言模式和该模式下是否设置了默认格式化器——
[javascript]块里没配,Shift+Alt+F就永远静默
本地 prettier 包没装,Prettier 插件就是个空壳
Prettier VS Code 插件本身不含 CLI,它只是调用你项目里安装的 prettier 包。没装包,就会在输出面板(Output → Prettier)看到 Failed to load module 'prettier',且不报错、不提示、直接跳过格式化。
- 运行
npm install --save-dev prettier(推荐)或yarn add -D prettier,确保node_modules/.bin/prettier存在 - 避免全局安装:
npm install -g prettier在 macOS + nvm 或 Windows 权限受限环境下常找不到可执行路径 - 如果项目用了 ESM(
"type": "module"),配置文件要用.prettierrc.js并用export default;否则用.prettierrc.cjs并用module.exports = {}
Node.js 风格配置不显式声明,Prettier 就按默认规则来
Node.js 社区常见偏好(如无分号、单引号、链式调用换行宽松)不是 Prettier 默认行为。不配 .prettierrc,它就用 semi: true、singleQuote: false、printWidth: 80 —— 这些在 Node 场景下往往反直觉。
-
"semi": false:禁用分号,适配主流 Node 项目 -
"singleQuote": true:避免模板字符串中混用双引号 -
"trailingComma": "all":对象/数组末尾逗号,提升 git diff 可读性 -
"printWidth": 100:比默认 80 更适合fs.promises.readFile().then().catch()这类长链调用 - 别忘了加
.prettierignore,至少排除node_modules/和dist/,否则格式化整个依赖树会卡死
和 ESLint 共存时,别让 formatOnSave 和 fixAll 同时开
如果同时启用 "editor.formatOnSave": true 和 "editor.codeActionsOnSave": {"source.fixAll.eslint": true},Prettier 和 ESLint 会反复覆盖彼此的结果:比如 ESLint 把 var 改成 const,Prettier 紧接着重排缩进,再触发 ESLint 修复,循环发生。
- 正确做法:关掉
editor.formatOnSave,只开"editor.codeActionsOnSave": {"source.fixAll.eslint": true} - 确保
eslint.config.js中已集成eslint-plugin-prettier和eslint-config-prettier,让 ESLint 调用 Prettier 做最终样式统一 -
"eslint.format.enable": true必须开启,否则 ESLint 不会响应格式化请求
真正容易被忽略的点是:VS Code 的格式化行为完全由你本地工具链驱动,不是插件或设置单独决定的。缺 prettier 包、配错语言块、没设默认格式化器 ID、或 ESLint/Prettier 规则打架——任何一个环节断掉,Shift+Alt+F 就只是个摆设。


















