Day4【代码规范】格式化规则和命令行工具

格式化规则

专栏所有代码地址:github.com/Sunny-117/j...

作为一个格式化代码的工具,最最重要的就是格式化依据的规则是什么?以及如何配置这些规则。

在官网的 prettier.io/docs/en/opt... 页面就可以看到所有的格式化规则。

这些规则虽然很重要,但是本身来讲都很简单,只要会看一个,其他的也就都会了。

例如下面是 prettier 里面其中的一条规则,主要需要学会看规则说明以及下面的表:

那么多规则不可能挨着挨着去过一遍,一般来讲,了解一些常用的规则,之后另外一些规则用到了自然也就会了。和当初学习编程语言关键字非常类似,用到一个自然就会记住一个。

  • 行宽:Prettier 默认将行宽限制在 80 个字符。如果一行代码超过这个长度,Prettier 会自动进行换行。你可以通过 printWidth 配置项自定义行宽。

  • 缩进:Prettier 默认使用 2 个空格进行缩进。你可以通过 tabWidthuseTabs 配置项自定义缩进宽度和是否使用制表符(tab)。

  • 分号:Prettier 默认在每个语句结尾添加分号。你可以通过 semi 配置项选择是否强制添加分号。

  • 引号:Prettier 默认使用双引号。你可以通过 singleQuote 配置项自定义引号类型。

  • 尾随逗号:Prettier 默认在多行结构(如对象字面量和数组字面量)的最后一个元素后添加尾随逗号。你可以通过 trailingComma 配置项自定义尾随逗号的使用。

  • 括号空格:Prettier 默认在括号内添加空格。例如,{ foo: bar }。你可以通过 bracketSpacing 配置项自定义括号内的空格。

  • 箭头函数参数括号:Prettier 默认在箭头函数只有一个参数时省略参数括号。你可以通过 arrowParens 配置项自定义箭头函数参数括号的使用。

  • HTML 属性换行:Prettier 会在 HTML 标签的属性超过 printWidth 时进行换行。你可以通过 htmlWhitespaceSensitivity 配置项自定义换行策略。

  • JSX 标签闭合:Prettier 默认将没有子元素的 JSX 标签闭合。例如,<br />。你可以通过 jsxBracketSameLine 配置项自定义 JSX 标签闭合的风格。

注意这些规则是 prettier 默认规则,也是行业内的最佳实践标准,因此我们平时在书写代码的时候,就应该主动的按照这些规则去规范书写我们的代码。

配置文件

配置文件的作用是做规则自定义。在 prettier 里面实际上提供了多种配置方式,并且多种配置方式之间会有一个优先级。

接下来我们来看一下究竟有哪些配置方式(优先级从高到低)

  1. 命令行选项:在 package.json 中配置 script 脚本命令的时候,是可以添加配置参数的
js 复制代码
"format": "prettier --no-semi --print-width 50 --write ."

这种命令行的配置方式优先级是最高的,但是这种方式仅限于自定义一两条规则,如果需要自定义规则比较多,那么还是推荐使用单独的配置文件。

  1. 文件中配置:这种方式就是单独创建一个配置文件,这里支持的配置文件的格式实际上是比较多。例如 .prettierrc、.prettierrc.json、.prettierrc.yaml、.prettierrc.yml、.prettierrc.jsprettier.config.jsPrettier 会自动识别并应用这些文件中的配置。在这些文件里面,一般就是一个对象
js 复制代码
{
  "singleQuote": true,
  "semi": false,
  "printWidth": 80,
  "trailingComma": "es5"
}

正常情况下,一个项目中写一个配置文件就可以了,但是如果不小心有多个配置文件,那么确实也涉及到一个优先级问题。优先级顺序如下(由高到低):

  • .prettierrc.jsprettier.config.js
  • .prettierrc.yaml 或 .prettierrc.yml
  • .prettierrc.json
  • .prettierrc
  1. 在 pacakge.json 中进行配置:可以在 package.json 文件中添加一个配置选项 prettier,然后进行配置
js 复制代码
{
    "name": "my-project",
    "version": "1.0.0",
    "prettier": {
      "singleQuote": true,
      "tabWidth": 4
    }
 }
  1. 编辑器配置:许多代码编辑器可以安装和 prettier 相关的插件,之后可以在编辑器的 settings > extensions 里面进行配置
  2. prettier 默认配置:默认配置一般优先级是最低,但是却是最常用的,因为这套配置已经是行业最佳实践了。

有点类似于 .gitignore,prettier 也支持 .prettierignore,用来排出一些文件或者目录,也就是说,出现在 .prettierignore 里面的文件或者目录不会被 prettier 进行处理。

例如:

js 复制代码
# 忽略所有的 .min.js 文件
*.min.js

# 忽略整个 build 目录
/build/

# 忽略 node_modules 目录
node_modules/

# 忽略特定文件
my-special-file.js

关于 .prettierignore 里面具体的路径写法,可以参阅 .gitignore 的写法:git-scm.com/docs/gitign...

命令行工具

在最初的时候,我们在 pacakge.json 里面做了一个命令行的配置:

js 复制代码
"scripts": {
    //...
    "format": "prettier --write ."
},

关于 prettier 究竟支持哪些 CLI 命令,我们可以在官网中看到:prettier.io/docs/en/cli...

关于 CLI 命令有一个最基本的格式:

js 复制代码
prettier [options] [file/dir/glob ...]
  • options: 格式化的选项
  • file/dir/glob:要格式化的文件或者目录

接下来我们来看一下在第一节课写的命令:

prettier --write .

  • --write 就是配置选项,本来 prettier 格式化完成后是在控制台输出的, --write 代表写入到原本的文件,--write 还有一个别名就是 -w

  • . 是第二个参数,代表的是要格式化的路径,正常情况下你可以写一个文件或者写一个目录,例如

    bash 复制代码
    prettier --write file.js # 只格式化 file.js 这个文件
    prettier -w "src/**/*.js" # 格式化 src 目录下面的所有的 js 文件(包含 src 下面的子目录)

    上面的 . 表示当前目录以及子目录下所有支持的文件,全部格式化之后写回原来的文件。

接下来介绍一些常见的 options

  • --check:该配置参数用于检查文件是否已经按照 prettier 规则进行了格式化,如果匹配的路径下面的所支持的文件已经全部被格式化,那么会输出 All matched files use Prettier code style!,否则会显示哪些文件还没有被 prettier 格式化

  • --find-config-path and --config:指定配置文件的路径,正常情况下,prettier 会自动去找项目下面的配置文件。但是如果你的配置文件不在项目中,而是在其他的位置,那么这个也是可以指定的

bash 复制代码
prettier --config ~/configs/prettier.json --write .
  • --no-config: 不读取任何配置文件,直接使用 prettier 里面默认的配置。
  • --ignore-path:指定忽略文件的路径,正常情况下也是在当前项目中去寻找,但是如果你的忽略文件不在项目中,而是在其他位置,也是可以指定的
bash 复制代码
prettier --ignore-path ~/configs/ignore/.prettierignore --write .
  • 规则的配置:上一节课介绍了的 prettier 所有的规则都可以在 CLI 命令里面进行配置的。不过这种只适用于单独的一两个规则,如果你的规则比较多还是应该单独拿一个配置文件来配置规则。
相关推荐
uhakadotcom3 小时前
视频直播与视频点播:基础知识与应用场景
后端·面试·架构
范文杰3 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪3 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪4 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy4 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom5 小时前
快速开始使用 n8n
后端·面试·github
uhakadotcom5 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom5 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom5 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom5 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试