代码格式混乱不仅影响阅读体验,还容易让团队协作中的代码审查变得低效。尤其是 JavaScript、TypeScript、Vue、React、JSON、CSS 等项目,如果每个人使用不同的缩进、引号和换行习惯,提交到 Git 后很容易产生大量无意义的格式差异。
Prettier 是目前前端开发中常用的代码格式化工具,可以按照统一规则自动整理代码。结合 VSCode 的保存时格式化功能,还可以实现“保存即格式化”,减少手动调整代码格式的工作量。
一、Prettier是什么
Prettier 是一个专注于代码格式化的工具,支持 JavaScript、TypeScript、JSON、CSS、SCSS、Less、HTML、Markdown、YAML 等多种文件类型。
它与传统代码检查工具的定位有所不同。ESLint 更关注代码质量、潜在错误以及编码规范,而 Prettier 主要负责代码的排版和格式统一。
例如下面这段 JavaScript:
JavaScriptconst user={name:"Tom",age:18} function getUser(){return user}
经过 Prettier 格式化后,可以变成:
JavaScriptconst user = { name: "Tom", age: 18 }; function getUser() { return user; }
缩进、空格、分号以及换行方式都会按照配置规则统一处理。
二、VSCode安装Prettier插件
VSCode 本身并不会自动提供完整的 Prettier 格式化能力,因此通常需要安装对应扩展。
打开 VSCode 后,可以使用快捷键:
Ctrl + Shift + X
进入扩展市场,在搜索框中输入:
Prettier - Code formatter
找到 Prettier 官方扩展后点击安装。
安装完成后,可以打开一个 JavaScript、TypeScript 或 Vue 文件进行测试。
如果右下角状态栏能够看到格式化工具相关信息,说明插件已经正常加载。
三、设置Prettier为默认格式化工具
安装多个格式化插件后,VSCode 可能无法确定当前文件应该使用哪个格式化工具,因此建议明确指定 Prettier。
打开任意代码文件,使用快捷键:
Ctrl + Shift + P
搜索:
Format Document With...
选择:
Configure Default Formatter
然后选择:
Prettier - Code formatter
完成设置后,VSCode 就会优先使用 Prettier 对对应文件进行格式化。
也可以直接通过 VSCode 的 settings.json 配置:
JSON{ "editor.defaultFormatter": "esbenp.prettier-vscode" }
如果希望针对不同语言分别指定格式化工具,可以这样配置:
JSON{ "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[vue]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } }
这种方式适合项目中同时存在多种开发语言和格式化工具的情况。
四、手动执行代码格式化
完成配置之后,可以通过快捷键手动格式化当前文件。
Windows 和 Linux 下通常使用:
Shift + Alt + F
macOS 下使用:
Shift + Option + F
也可以通过命令面板执行:
Format Document
例如原始代码:
JavaScriptfunction add(a,b){ return a+b }
执行 Prettier 后:
JavaScriptfunction add(a, b) { return a + b; }
这种方式适合只想在代码编写完成后统一整理格式的开发场景。
五、开启VSCode保存时自动格式化
如果希望每次保存代码时自动执行 Prettier,可以开启:
JSON{ "editor.formatOnSave": true }
同时指定 Prettier:
JSON{ "editor.defaultFormatter": "esbenv.prettier-vscode", "editor.formatOnSave": true }
其中插件 ID 应使用:
JSON"esbenp.prettier-vscode"
完整配置示例:
JSON{ "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }
如果项目中只有部分语言需要保存时格式化,也可以针对语言配置:
JSON{ "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, "[vue]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true } }
这样可以避免对不需要 Prettier 处理的文件产生影响。
六、使用.prettierrc统一项目代码规范
个人 VSCode 配置只能解决本地开发环境的问题。如果一个团队中的成员使用不同的编辑器,仅配置 VSCode 并不能保证所有人的代码格式一致。
更推荐在项目根目录创建 Prettier 配置文件。
例如:
.prettierrc
配置内容:
JSON{ "semi": true, "singleQuote": true, "tabWidth": 2, "useTabs": false, "trailingComma": "es5", "printWidth": 100 }
这些配置分别表示:
-
semi:是否在语句末尾添加分号。 -
singleQuote:JavaScript 中优先使用单引号。 -
tabWidth:缩进宽度设置为 2 个空格。 -
useTabs:是否使用 Tab 进行缩进。 -
trailingComma:多行对象、数组等结构是否添加尾随逗号。 -
printWidth:控制代码换行参考宽度。
例如:
JavaScriptconst user = { name: 'Tom', age: 18, address: 'Singapore' };
项目中的开发人员只要使用同一份 Prettier 配置,就可以保持基本一致的代码格式。
七、推荐使用.prettierignore排除文件
并不是项目中的所有文件都适合使用 Prettier 格式化。
例如:
node_modules dist build coverage *.min.js *.min.css
可以放入:
.prettierignore
示例:
node_modules dist build coverage *.min.js *.min.css
这样执行 Prettier 时就不会处理这些目录和文件。
对于体积较大的构建产物、压缩文件以及第三方依赖目录,通常应该避免进行格式化。
八、在项目中安装Prettier
除了安装 VSCode 扩展,还可以将 Prettier 作为项目开发依赖安装。
使用 npm:
Bashnpm install --save-dev prettier
使用 pnpm:
Bashpnpm add -D prettier
使用 Yarn:
Bashyarn add --dev prettier
安装完成后,可以直接通过命令行执行格式化。
例如:
Bashnpx prettier --write .
其中 --write 表示直接将格式化结果写回文件。
如果只想检查代码格式,可以使用:
Bashnpx prettier --check .
两者的区别比较明显:
--write 检查并修改文件 --check 只检查,不修改文件
在 CI/CD 流程中,通常更适合使用 --check,避免构建过程中直接修改代码。
九、通过package.json配置格式化命令
为了方便团队成员执行,可以在 package.json 中添加脚本:
JSON{ "scripts": { "format": "prettier --write .", "format:check": "prettier --check ." } }
之后运行:
Bashnpm run format
即可格式化整个项目。
检查代码格式则执行:
Bashnpm run format:check
这种方式比单纯依赖个人编辑器设置更加可靠,因为格式化规则和执行命令都能够随项目代码一起进行版本管理。
十、Vue项目中的Prettier配置
Vue 项目通常会同时涉及 .vue、.js、.ts、.css 等文件,因此建议明确配置 VSCode 的默认格式化工具。
例如:
JSON{ "[vue]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true } }
对于 Vue 组件:
vue