Prettier CLI 每次保存启动新进程,Node.js 开销大,延迟达300–800ms;prettierd 作为常驻守护进程,响应仅15–40ms,但需手动管理生命周期,且 Sublime 需通过 JsPrettier 的 custom_command 配置(如 ["prettierd", "--stdin-filepath", "{file_path}"])绕过默认 CLI 调用,并确保其可执行路径正确、进程持续存活。

为什么不用 Prettier CLI 而要上 prettierd?
普通 prettier CLI 每次保存都启动新进程,Node.js 启动开销明显,尤其在大型文件或频繁保存时,延迟常达 300–800ms;prettierd 是基于 prettier 的守护进程(daemon),首次启动后常驻内存,后续格式化请求通过 IPC 或 Unix socket 快速响应,实测平均耗时 15–40ms。但它的代价是:必须手动管理进程生命周期,且 Sublime 插件不原生支持——得靠 JsPrettier 的自定义命令能力绕过默认 CLI 调用路径。
JsPrettier 怎么调用 prettierd 而不是 prettier?
JsPrettier 默认走 prettier_cli_path 直接执行 CLI,要切到 prettierd,得用它提供的 custom_command 配置项,绕过默认流程:
- 先确保已安装
prettierd:npm install -g prettierd(或yarn global add prettierd),验证prettierd --version可运行 - 启动守护进程(建议后台常驻):
prettierd --stdio(开发时可先前台运行看日志),或用systemd/launchd/pm2管理 - 在
Preferences → Package Settings → JsPrettier → Settings – User中写入:
{
"auto_format_on_save": true,
"custom_command": ["prettierd", "--stdin-filepath", "{file_path}"],
"auto_format_on_save_excludes": ["*/node_modules/*", "*/dist/*"]
}
注意:{file_path} 是 JsPrettier 内置变量,会自动替换为当前文件绝对路径;--stdin-filepath 告诉 prettierd 根据文件扩展名和项目配置(如 .prettierrc)正确解析语法。
prettierd 启动失败或 Sublime 报错 command not found 怎么查?
常见现象:保存无反应,控制台(View → Show Console)里出现 JsPrettier ERROR: Command 'prettierd' not found 或 spawn ENOENT —— 这不是插件问题,而是 Sublime 找不到 prettierd 可执行文件:
- macOS GUI 启动的 Sublime 通常不继承 shell 的
PATH(比如~/.zshrc里的npm global bin路径),终端能跑不代表 Sublime 能跑 - 解决方案:不依赖 PATH,改用绝对路径写死
custom_command,例如:"custom_command": ["/opt/homebrew/bin/prettierd", "--stdin-filepath", "{file_path}"](用which prettierd确认真实路径) - Windows 用户注意:
prettierd.cmd是包装脚本,直接调prettierd可能失败,应填"custom_command": ["C:\Users\xxx\AppData\Roaming\npm\prettierd.cmd", "--stdin-filepath", "{file_path}"] - 若用
pnpm全局安装,路径通常是pnpm prefix -g+/bin/prettierd(macOS/Linux)或\bin\prettierd.cmd(Windows)
怎么避免 prettierd 守护进程被意外杀掉?
prettierd 是独立进程,Sublime 关闭不影响它,但系统重启、CI 环境或误操作可能终止它——而 JsPrettier 不会自动重拉起,导致后续保存完全失效,且无任何提示:
- 推荐用
launchd(macOS)或systemd(Linux)托管,设置KeepAlive/Restart=always,确保开机即启、崩溃自愈 - 简单方案:在 shell profile 里加一行
nohup prettierd --stdio > /dev/null 2>&1 &(仅适合开发机,不推荐生产或共享环境) - 验证是否存活:
lsof -i :9234(默认端口)或ps aux | grep prettierd;如果没输出,格式化就会静默失败 - JsPrettier 不报错也不 fallback,它只管发请求——所以“保存没反应”第一反应不该是调插件配置,而是先 check
prettierd进程还在不在
真正卡点不在配置,而在守护进程的稳定性;本地开发可以凑合手动启,但团队共用或 CI 流水线里,漏掉进程管理这步,毫秒级就变秒级。


















