Prettier 介绍
Prettier 它删除所有原始风格样式 * 并确保所有输出的代码都符合一致的风格。
原文是这样介绍它的,通俗一点就是按照配置的规则来格式化代码,增强代码的可读性。比如 占用一行的长代码自动换行成多行等。
自己总结的小文章
插件
插件是向 Prettier 添加新语言或格式化规则的一种方式。Prettier 对所有语言的自身实现都是通过插件 API 表达的。核心的 prettier 包内置了 JavaScript 和其他面向 Web 的语言。对于额外的语言,你需要安装相应的插件。
Prettier 默认支持 JavaScript、TypeScript、HTML、CSS、JSON 等常见的 Web 开发语言和格式。对于 Vue、React 和 TypeScript 这样的库或框架,Prettier 也提供了支持,但可能需要额外的配置或插件来确保最佳的格式化效果。
-
Vue 支持:
- Prettier 默认支持 Vue 单文件组件 (SFCs),即
.vue文件。 - 如果需要更高级的 Vue 支持(例如 Vue 3 的
<script setup>语法),可以安装@vue/eslint-config-prettier并配置 ESLint 和 Prettier。
- Prettier 默认支持 Vue 单文件组件 (SFCs),即
-
React 支持:
- Prettier 默认支持 JSX 语法,因此可以很好地格式化 React 组件。
- 如果使用 TypeScript 与 React 结合,确保已安装 TypeScript 支持插件。
-
TypeScript 支持:
- Prettier 默认支持 TypeScript 语法。
- 为了获得最佳的 TypeScript 支持,确保安装了
typescript和@types/prettier。
与 Linters 集成
Linter 通常不仅包含代码质量规则,还包含文体规则。使用 Prettier 时,大多数风格规则都是不必要的,所以 Linter 中部分规则可能与 Prettier 发生冲突!
使用以下库解决冲突:
预提交钩子
你可以将 Prettier 与预提交工具一起使用。这可以在提交之前重新格式化通过 git add 标记为“暂存”的文件。
- lint-staged
此方式可以配合代码质量工具与Prettier(例如ESLint、Stylelint 等)一起使用.
或者如果你需要对部分暂存文件 (
git add --patch) 进行格式化时使用
npx mrm@2 lint-staged
此命令会安装 [husky](https://github.com/typicode/husky) 和 [lint-staged](https://github.com/okonet/lint-staged) 然后向项目的 package.json 添加一个配置,该配置将在预提交钩子中自动格式化支持的文件。
其他方式可以看官网预提交钩子的介绍。
配置信息
列一些我觉得很常用的 经常会改变的一些配置
experimentalTernaries三元运算符 默认值为 falsetrue- 使用奇怪的三元组,在条件后面加上问号false- 保留三元组的默认行为;将问号与结果保持在同一行。
printWidth打印宽度 就是一行最长多少,超出换行 默认值为 80
【官网文档说明】(点击展开)
为了便于阅读,我们建议不要使用超过 80 个字符:
在代码样式指南中,最大行长度规则通常设置为 100 或 120。然而,当人类编写代码时,他们不会努力达到每一行的最大列数。开发者经常使用空格来分隔长行以提高可读性。实际上,平均行长度通常远低于最大值。
Prettier 的 printWidth 选项的工作方式不同。这不是硬性允许的行长度上限。这是一种向 Prettier 大致说明你希望线路多长的方式。Prettier 会制作更短和更长的行,但一般会努力满足指定的 printWidth。
换句话说,不要尝试像使用 ESLint 的 max-len 一样使用 printWidth ——它们不一样。max-len 只是表示允许的最大行长度,而不是通常首选的长度 - 这是 printWidth 指定的。
-
tabWidthtab字符在编辑器中的空格数量 默认值为 2 -
useTabs缩进类型是否使用制表符而不是使用空格 默认值为 false -
semi末尾添加分号 默认值为 falsetrue- 在每个语句的末尾添加一个分号。false- 只在 可能会引入 ASI 故障 的行首添加分号。
-
singleQuote定义字符串时是否使用单引号 默认值为 false- 注意 jsx 引号忽略此选项
-
quoteProps用于控制对象字面量中的属性名何时应该使用引号 默认值为 as-needed""as-needed"- 只在必要时使用引号,即当属性名不是有效的标识符时。"consistent"- 如果对象中有任何一个属性名需要使用引号,则所有属性名均使用引号。"preserve"- 保持源代码中的引号使用,即如果源代码中某个属性名使用了引号,则在格式化后的代码中也使用引号。
-
bracketSpacing对象字面量中括号之间的空格 默认值为 truetrue- 示例:{ foo: bar }false- 示例:{foo: bar}
-
bracketSameLine标签最后>是否换行 默认值为 false 将多行 HTML(HTML、JSX、Vue、Angular)元素的>放在最后一行的末尾,而不是单独放在下一行(不适用于自关闭元素)true- 示例:
<button className="prettier-class" id="prettier-id" onClick={this.handleClick}> Click Here </button>false- 示例:
<button className="prettier-class" id="prettier-id" onClick={this.handleClick} > Click Here </button> -
bracketSpacing在唯一的箭头函数参数周围包含括号 默认值为 always"always"- 始终包括父级。示例:(x) => x"avoid"- 尽可能省略括号。示例:x => x
-
htmlWhitespaceSensitivityDOM 标签中的属性是否保留空格 默认值为 css
-
"css"- 遵守 CSSdisplay属性的默认值。对于与strict相同处理的 Handlebars。- 解释:
css:此选项尊重 CSSdisplay属性的默认值。这意味着 Prettier 会考虑元素的默认显示方式来决定是否保留空白字符。例如,对于默认为block的元素(如<div>),Prettier 会保留空白字符以保持更好的可读性。- Handlebars:对于 Handlebars 模板,
css选项的行为与strict选项相同,即严格遵循源代码中的空白字符。
- 解释:
-
"strict"- 严格遵循源代码中的空白字符。 -
"ignore"- 严格遵循源代码中的空白字符。
endOfLine每个结束行的换行符 默认值为 lf"lf"- 仅换行 (\n),在 Linux 和 macOS 以及 git repos 中很常见"crlf"- 回车 + 换行字符 (\r\n),在 Windows 上很常见"cr"- 仅回车字符 (\r),很少使用"auto"- 维护现有的行结尾(一个文件中的混合值通过查看第一行之后使用的内容来规范化)
此配置 原因在于 不同的操作系统 具体说明可以查看官方文档
singleAttributePerLineDOM 标签属性是否换行 默认值为 falsefalse- 不要强制每行使用一个属性true- 每行强制执行单个属性.
Parser 解析器
单独讲一下这个, 它的作用就是指定要使用的解析器进行对文件的解析,并按此规则进行格式化。
而且 Prettier 使用不同的解析器来处理不同类型的源代码文件。默认情况下,Prettier 会根据文件扩展名自动选择适当的解析器.
注意: 自定义解析器 API 已在 v3.0.0 中删除。使用 插件 代替
大家可以到 Prettier_Playground 中体验一下, 而且可以看到生成的AST树,可以深入分析原理。
配置文件
配置文件的优先级:
package.json中"prettier"键。.prettierrc文件w.prettierrc.json、.prettierrc.yml、.prettierrc.yaml或.prettierrc.json5文件.prettierrc.js或prettier.config.js文件.prettierrc.toml文件
相关项目
在官方文档-相关项目中有提到这一块,基本就是配合 ESLint 或者 StyleLint 一起使用时需要的一些库,用于解决冲突。这里可以看官网去更准确。
小小结
这里主要了解 Prettier 是做什么的,可以格式化哪些配置。命令行等其他方式这里就不讲了,有兴趣的可以到官方查阅。