npx prettier --write 卡住主因是遍历了不该处理的文件。应使用带引号的精准 glob、配置正确 .prettierignore(如 dist/、node_modules/.pnpm/**)、加 --ignore-unknown 和 --loglevel warn 来提速。

为什么 npx prettier --write 会卡住
执行 npx prettier --write 后终端长时间无响应,常见原因不是 Prettier 本身慢,而是它在遍历和解析大量不该碰的文件。比如 node_modules/ 下的压缩包、dist/ 里的构建产物、coverage/ 报告,甚至 .git/ 目录里被 glob 错误匹配到的文件——这些都会触发完整 parse + print 流程,CPU 和 I/O 瞬间拉满。
- 路径通配符没加引号,shell 提前展开失败,导致 Prettier 收到空参数或错误路径
-
.prettierignore文件存在但路径写错(如写了./dist/或绝对路径),Prettier 直接无视 - 用了 pnpm,但
.prettierignore只写了node_modules/,实际硬链接在node_modules/.pnpm/** - glob 模式包含不支持的扩展名(如
.lock、.log),Prettier 默认报错中断,而非跳过
怎么让批量格式化真正“快起来”
核心是减少输入、避免解析、跳过无效文件。CLI 层面可控性远高于 VS Code 插件,关键靠三件事:精准 glob、忽略兜底、静默容错。
- 用双引号包裹 glob:
npx prettier --write "**/*.{js,ts,jsx,tsx,css,scss,html,json,md}",防止 shell 提前展开漏掉深层嵌套 - 加
--ignore-unknown:遇到.d.ts、.env这类不支持的类型直接跳过,不停止执行 - 加
--loglevel warn:只输出被修改的文件,屏蔽 “ignored because it matches .prettierignore” 这类冗余日志 - 首次运行先
--check:确认影响范围,避免误改生成文件或第三方代码
.prettierignore 配置容易失效的坑
.prettierignore 是唯一被 CLI 和 VS Code 插件共同遵守的过滤机制,但它对路径写法极其敏感。放在项目根目录(即 package.json 所在层)是硬性前提,否则完全不生效。
- 必须写相对路径,且结尾带斜杠:
dist/、build/、node_modules/、**/*.min.js - 不要写
./dist/、/Users/xxx/project/dist,Prettier 会跳过整行 - pnpm 用户额外加一行:
node_modules/.pnpm/**,否则node_modules/这行形同虚设 - VS Code 设置里显式声明:
"prettier.ignorePath": ".prettierignore",避免插件向上查找失败
VS Code 里一键触发但不卡顿的方案
不想切终端?可以配置 tasks.json 把 CLI 命令封装成任务,再绑定快捷键。这比依赖插件内置的“批量格式化”功能可靠得多——因为插件层根本没实现递归扫描逻辑,所谓“工作区格式化”多数只是伪操作。
- 在
.vscode/tasks.json中添加 task,command 设为npx,args 传["prettier", "--write", "..."] - 设置
"isBackground": false和"problemMatcher": [],避免误判为构建任务 - 用命令面板(
Cmd+Shift+P)运行该 task,或绑定自定义快捷键 - 务必关掉
editor.formatOnSave对大文件的干扰:设"editor.formatOnSaveMode": "modifications",只处理改动行



















