使用Prettier统一团队代码

1,093 阅读2分钟

前言

问题:在日常团队维护中我们总会遇到 A 同事喜欢空格缩进 B 同事喜欢 tab 缩进。随着项目的庞大,代码风格的不统一终究会造成项目代码紊乱,难以维护的局面。

解决方案:针对每位同事的代码风格不一致,为了保证团队统一风格,借用统一的格式化工具 Prettier

插件Prettier

A01.png

用来做代码格式化,有了Prettier之后,它能去掉原始的代码风格,确保团队的代码使用统一相同的格式,用官网的原话是"Building and enforcing a style guide"。它和Linter系列比如ESLint的区别在于Prettier是一个专注于代码格式化的工具,对代码不做质量检查。

安装使用步骤

第一步:vscode下载插件prettier

A02.png

第二步:进入vscode的设置界面,mac快捷键shift+command+p,window快捷键shift+ctrl+p,输入open user settings,选择这个

A03.png

第三步:在设置界面搜索,输入format on save,然后选择format on save

A04.png

第四步:再设置界面搜索,输入default formatter,选择prettier-vscode

A05.png

问题:

如果没有esbenp.prettier-vscode 这个下拉选项怎么办?

解决方案:

手动打开setting.json文件

20200612170330802.png

在json中添加以下代码:

  // 使能每一种语言默认格式化规则
  "[html]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[css]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[less]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },

image.png

第五步: 配置.prettierrc.json 在项目根目录下建立 .prettierrc.json 并将以下代码填入

A08.png

.prettierrc.json

{
    "printWidth": 100, 
    "tabWidth": 2,
    "singleQuote": true, 
    "trailingComma": "none",
    "bracketSpacing": true, 
    "jsxBracketSameLine": true, 
    "parser": "babel", 
    "semi": true, 
    "useTabs": true, 
    "arrowParens": "avoid", 
    "jsxSingleQuote": true,
    "htmlWhitespaceSensitivity": "ignore",
    "quoteProps": "as-needed" 
}

经过上述配置,就可以愉快的玩耍了,保存自动格式化代码

配置参考

大家可能对详细的配置还不是特别了解,或者需要自己按需配置一些东西,下面我给大家整理了常见的配置项和意义

配置项意义配置值说明
Print Width换行的宽度,其实对于现在普遍的宽屏显示器可以适当调高。80
Tab WidthTab字符的空格宽度。2
Tabs缩进用Tab还是用空格。false
Semicolons是否行尾自动加上分号。true
Quotes是否用单引号替代双引号,JSX会忽略这个配置。false
Quote Props对象里的key要不要用引号包裹。<as-needed\consistent\preserve>
JSX QuotesJSX里用单引号替代双引号。false
Trailing Commas多行情况下,是否加上最后元素的逗号。<es5\none\all>
Bracket Spacing对象直接量括号之间是否有空格。true
JSX BracketsJSX里多行元素的>是否出现在新的一行。false
Arrow Function Parentheses箭头函数的单参数是否用括号包裹。<always\void>
Range文件格式化的范围。0
Parser指定哪种解析器。babel、babel-flow...

更多请参考官方API