prettier-atom是atom中格式化javascript/typescript/jsx/vue代码最稳的插件,开箱即用,默认支持.js/.ts/.jsx/.tsx/.vue script块;需手动启用format on save,自动读取.prettierrc或prettier.config.js,不读package.json中的prettier字段。

prettier-atom 是 JavaScript/TypeScript/JSX/Vue 的首选格式化插件
它不是“能用”,而是当前 Atom 中对现代前端代码最稳的格式化方案。默认支持 .js、.ts、.jsx、.tsx 和 .vue 文件中的 <script></script> 块,开箱即用,基本不用调语言支持。
常见错误现象:装完插件后保存没反应——大概率是 Atom 没把文件识别为对应语言。检查右下角状态栏显示的语法名,必须是 JavaScript 或 Vue Component,不是 Plain text 或 HTML。
- 安装命令:
apm install prettier-atom - 必须手动开启
Format on Save(设置 → Packages →prettier-atom→ 勾选) - 项目根目录有
.prettierrc或prettier.config.js会自动加载;但package.json里的prettier字段不读 - 若用
.mjs或.cjs扩展名,需在.prettierrc中加overrides显式声明
atom-beautify 覆盖语言多,但配置容易失效
它支持 Python、Java、C++、Go、HTML、CSS 等,但每种语言都要单独配通 CLI 工具,不是装完就跑。尤其在 Atom 1.60+ 后,旧版 atom-beautify 会因依赖 Buffer() 构造函数而静默崩溃。
常见错误现象:TypeError: Buffer is not a function(打开开发者工具 Ctrl+Shift+I 可见),右键菜单变灰、快捷键无响应。
- 必须确保安装的是
v0.33.4+版本(旧版需先卸载再重装) - 格式化引擎要单独装:
apm install js-beautify(不是npm install) -
On Save不是“保存就格式化”,而是受debounce(默认 300ms)、路径忽略(如.gitignore里文件被跳过)、language-id 是否匹配三重限制 - 不推荐和
prettier-atom同时启用——两者监听同一事件,会重复触发甚至相互覆盖
linter-eslint 不能替代格式化,但它能和 prettier-atom 协同
linter-eslint 是校验器,不是格式化器。它报 semi: expected semi,但不会帮你加;提示 quotes: Expected singlequote,也不会自动改双引号为单引号。
常见错误现象:Vue 单文件中 JS 部分不被 lint,90% 是因为 Lint HTML Files 开关默认关闭,必须手动打开。
- 若已启用
prettier-atom的Format on Save,务必关掉linter-eslint的Fix errors on save,否则两者规则冲突,代码越修越乱 -
linter-eslint可以调用 Prettier 规则做 autofix,但前提是配置了eslint-config-prettier并禁用所有与格式相关的 ESLint 规则 - 格式化只作用于已保存文件,未保存的脏缓冲区不会触发——这是
prettier-atom的明确设计,不是 bug
格式化失效时优先排查 language-id 和配置优先级
Atom 的格式化行为极度依赖 grammar(即 language-id)是否正确。哪怕配置全对,.vue 文件被识别为 HTML,prettier-atom 就不会处理其中的 JS;.py 被识别为 Plain text,atom-beautify 就找不到 python 格式化器。
另一个易忽略点是配置文件的优先级:prettier-atom 优先读 prettier.config.js,其次才是 .prettierrc;而 .editorconfig 只补缺(如 end_of_line),不覆盖 .prettierrc 已定义的字段。
- 快速切换 language-id:
Ctrl+Shift+P→ 输入Change Language Mode - 验证是否生效:打开一个已保存的
.js文件,按Ctrl+S,看状态栏是否短暂出现Prettier提示 - 扩展名不在默认列表?在
.prettierrc中加overrides,或在 Atom 的config.cson里手动映射:"*.myext": "source.js"










