vscode中prettier不生效主因是未正确加载.prettierrcignore:需将文件置于工作区根目录,设置prettier.ignorepath为.prettierrcignore,插件版本≥10.0.0,重启窗口,并确认默认格式化工具为esbenp.prettier-vscode。

VSCode 里 Prettier 不生效,其实是没读到 .prettierignore
VSCode 默认不会自动加载项目根目录的 .prettierignore,除非你明确告诉它“这个文件存在且要被尊重”。常见现象是:你在终端里跑 prettier --write . 能正常跳过 node_modules 或 dist,但在 VSCode 里保存时这些文件仍被格式化——根本原因是 VSCode 的 Prettier 插件默认只认自己配置项,不主动查 .prettierignore。
实操建议:
- 确保
.prettierignore文件放在**工作区根目录**(不是用户主目录,也不是子文件夹) - 在 VSCode 设置里搜索
prettier.ignorePath,把它设为.prettierignore(字符串值,不带引号) - 如果项目用的是 Prettier v3+,还要确认插件版本 ≥ 10.0.0,老版本对
.prettierignore支持不完整 - 重启 VSCode 窗口(不是重载窗口),否则改动不生效
想忽略某类文件但写错了路径,.prettierignore 语法很关键
.prettierignore 不是正则,是类似 .gitignore 的 glob 模式,路径匹配逻辑容易误解。比如写 src/*.ts 并不能忽略所有 TS 文件,因为 Prettier 匹配的是“相对于当前工作区的完整路径”,不是相对当前 ignore 文件的位置。
常见错误和写法:
-
dist/✅ 忽略整个 dist 目录(结尾斜杠表示目录) -
**/*.d.ts✅ 忽略所有声明文件(**表示任意层级) -
src/**/test-*.js✅ 忽略 src 下任意子目录里以 test- 开头的 JS 文件 -
node_modules❌ 不加斜杠可能只忽略同名文件,不是目录;应写成node_modules/ -
./src/index.js❌ 开头的./会被忽略,Prettier 不支持这种写法
VSCode 保存时仍格式化被 ignore 的文件?检查是否被其他插件劫持
Prettier 插件不是唯一能触发格式化的工具。如果你装了 ESLint、TypeScript 自带格式化,或者设置了 "editor.formatOnSave": true 但没指定 defaultFormatter,VSCode 可能调用了别的 formatter,完全绕过 Prettier 和它的 ignore 规则。
排查步骤:
- 右键编辑器 → “Format Document With…” → 看当前默认 formatter 是不是
esbenp.prettier-vscode - 在设置里搜
editor.defaultFormatter,确保它是esbenp.prettier-vscode,而不是vscode.typescript-language-features - 关掉 ESLint 的 auto-fix-on-save(设置项:
eslint.autoFixOnSave),或改用eslint.codeAction.onSave.fixAll配合prettier规则 - 打开命令面板(
Ctrl+Shift+P),运行Developer: Toggle Developer Tools,看控制台有没有报Failed to resolve prettier configuration类错误
多根工作区下 .prettierignore 失效?每个文件夹得有独立配置
VSCode 的多根工作区(workspace with multiple folders)里,Prettier 插件默认只读取第一个文件夹下的 .prettierignore。如果你在第二个文件夹里编辑文件,即使它自己目录下也有 .prettierignore,也不会被识别。
解决方式有限但有效:
- 把所有子项目的 ignore 规则合并到工作区根目录的
.prettierignore中(推荐) - 或者,在 VSCode 设置里为每个文件夹单独指定
prettier.ignorePath,用绝对路径或 workspace-relative 路径(如project-a/.prettierignore) - 注意:路径必须存在,否则插件静默失败,不会报错也不会提示
Prettier 的 ignore 机制本身简单,但 VSCode 的插件加载顺序、多级配置覆盖、路径解析差异,会让问题看起来像“随机失效”。最常被忽略的是:改完 .prettierignore 后没重启窗口,以及没确认当前文档的默认 formatter 真的是 Prettier。











