从esLint+Prettier开始格式化代码

简介: 从esLint+Prettier开始格式化代码

1. 促使我要代码格式化的原因

代码格式化和代码规范对研发者来说,都并不陌生。随手的保存,随手的格式化代码,总让我们的代码更加漂亮。但是我们在一次次的格式化中,偶尔也有一些问题。
在开发同一个项目时,由于不同的开发者使用的编辑器不同,格式化方案也有所不同,还有一些开发者带有之前开发习惯的格式化配置,那么在代码提交中,就会出现格式变动。完成一个功能后,开心的commit,却发现多了很多不是自己的修改,甚至引发冲突。当你使用--no-verify顺利提交之后,发现引号在单双之间横跳 、缩进在两个空格和tab不断反复。。。
所以,为了让团队内有一个统一的代码规范,不再因为这些无伤大雅的问题浪费时间,我选择使用esLint+Prettier来帮助我们来统一内部~~~

2. esLint

ESLint是一个JS代码检查工具,用于发现并修正语法错误和统一代码格式。也就是说 ESLint 关注两方面的问题:

  • 代码质量:约定JS的使用方式,避免问题的产生
  • 代码格式:只影响代码的美观程度,不会产生问题

为什么我们需要代码检查呢?JS 作为一种弱类型动态语言,写法会比较随心所欲,这便很容易引入问题并增加我们发现问题的成本。通过编写合适的规则来约束代码,利用代码校验工具来发现并修复问题,能让我们的代码更健壮,工程更可靠。ESLint 就是这么一个通过各种规则对我们的代码添加约束的工具。

3. Prettier

在使用 ESLint 的时候,我们往往会配合 Prettier 使用。Prettier 是一个‘有态度’的代码格式化工具,专注于代码格式自动调整,ESLint 本身就可以解决代码格式方面的问题,为什么要两者配合使用?

  • ESLint 推出 --fix 参数前,ESLint 并没有自动格式化代码的功能,而 Prettier 可以自动格式化代码。
  • 虽然 ESLint 也可以校验代码格式,但 Prettier 更擅长。

二者搭配使用,ESLint 关注代码质量,Prettier 关注代码格式。但是二者在格式化上面的功能有所交叉,所以Prettier 和 ESLint 一起使用的时候会有冲突,这需要我们进行一些配置:

  • 关掉 (disable) 所有和 Prettier 冲突的 ESLint 的配置
    ```javascript
    // .eslintrc

{

"extends": ["prettier"] // prettier 一定要是最后一个,才能确保覆盖    

}


- 当我们使用 Prettier + ESLint 的时候,其实格式问题两个都有参与,disable ESLint 之后,其实格式的问题已经全部由 prettier 接手了。那我们为什么还要这个 plugin?其实是因为我们期望报错的来源依旧是 ESLint ,使用这个,相当于**把 Prettier 推荐的格式问题的配置以 ESLint rules 的方式写入**,这样相当于可以统一代码问题的来源。
```javascript
// .eslintrc    

{         

    "rules": {        

        "prettier/prettier": "error"      

    }    

}

4. 开始配置

4.1 全局安装esLint

全局安装是为了方便所有项目,也可以在本项目安装

//全局安装
npm install eslint -g

//本项目安装
npm install eslint --save

4.2 全局安装prettier

全局安装是为了方便所有项目,建议本项目也安装

//全局安装
npm install prettier -g

//本项目安装
npm install prettier --save

4.3 配置eslint

在项目的根目录增加.eslintrc.js文件,进行eslint规则配置
.eslintrc.js

module.exports = {
   
   
  root: true,

  parserOptions: {
   
   
    //parser: 'babel-eslint', // 解析一些最新的 es 语法
    //sourceType: 'module' // 模块为 ECMAScript 模块
  },

  extends: ['prettier'], //standard:标准;prettier:使用prettier规则,放到最后,会覆盖eslint规则

  rules: {
   
   
    // 'no-debugger': 'error', // 禁止在代码中使用 debugger
    quotes: ['error', 'single'], // 单引号
    semi: ['error', 'always'] // 代码需要以分号结尾
  }
};

4.4 配置prettier规则

在项目的根目录增加.prettierrc.js文件,进行prettier规则配置,以下配置为本人测试使用,如需详细配置规则,请自己配置。
.prettierrc.js

module.exports = {
   
   
  printWidth: 800, // 单行宽度限制
  tabWidth: 2, // tab 使用两个空格
  useTabs: false, // 不使用制表符缩进,使用空格缩进
  semi: true, // 代码需要分号结尾
  singleQuote: true, // 单引号
  bracketSpacing: true, // 对象左右两侧需要空格
  jsxBracketSameLine: false, // html 关闭标签换行
  arrowParens: 'avoid', // 单参数的箭头函数参数不需要括号
  proseWrap: 'never', // 参考 https://prettier.io/docs/en/options.html#prose-wrap
  trailingComma: 'none', // 参考 https://prettier.io/docs/en/options.html#trailing-commas
};

部分prettier配置规则

{
   
   
  "formatOnSave":true,//保存时自动格式化
  "formatOnPaste":true,//粘贴时自动格式化
  "printWidth": 100, // 超过最大值换行
  "tabWidth": 4, // 缩进字节数
  "useTabs": false, // 缩进不使用tab,使用空格
  "semi": true, // 句尾添加分号
  "singleQuote": true, // 使用单引号代替双引号
  "trailingComma": none, //在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号)
  "proseWrap": "preserve", // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行
  "arrowParens": "avoid", //  (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号
  "bracketSpacing": true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }"
  "disableLanguages": ["vue"], // 不格式化vue文件,vue文件的格式化单独设置
  "endOfLine": "auto", // 结尾是 \n \r \n\r auto
  "eslintIntegration": false, //不让prettier使用eslint的代码格式进行校验
  "htmlWhitespaceSensitivity": "ignore",
  "ignorePath": ".prettierignore", // 不使用prettier格式化的文件填写在项目的.prettierignore文件中
  "jsxBracketSameLine": false, // 在jsx中把'>' 是否单独放一行
  "jsxSingleQuote": false, // 在jsx中使用单引号代替双引号
  "parser": "babylon", // 格式化的解析器,默认是babylon
  "requireConfig": false, // Require a 'prettierconfig' to format prettier
  "requirePragma": false, // 不需要写文件开头的 @prettier
  "useEditorConfig": false,
  "stylelintIntegration": false, //不让prettier使用stylelint的代码格式进行校验
  "tslintIntegration": false // 不让prettier使用tslint的代码格式进行校验
}

Pretttier官方文档:https://prettier.io/docs/en/options.html

4.5 打开编辑器上的esLint和Prettier

由于在webstorm上,这两项不是自动启用的,而且在M1上,你是搜索不到prettier插件的的;可以根据下列方法,打开两个调试

4.5.1 webstorm

4.5.1.1 安装esLint和prettier插件

进入Preferences => Plugins =>Marketplace
搜索ESLint Restart Service Action,安装;这个就是在M1上的eslint;
搜索Perttier,安装;
image.png
image.png

4.5.1.2 打开esLint调试

进入Preferences => Languages & Frameworks => JavaScript => Code Quality Tools => ESLint

由于我是自己设置的格式化规则,所以这里我选择了Manual ESLint configuration模式
然后在最后选择了保存自动格式化
image.png

4.5.1.3 打开Prettier调试

进入Preferences => Languages & Frameworks => JavaScript => Prettier
选择要执行的文件Prettier package ,选择当前项目配置prettier
同样,我选择了保存自动格式化
image.png
以上webstorm完成配置;

4.5.2 vscode

4.5.2.1 安装插件

安装插件ESLint、Prettier - Code formatter
image.pngimage.png

4.5.2.2 设置eslint格式化快捷键

code => 首选项 => 键盘快捷方式,搜索 fix – 找到 ESLint 设置,双击按键绑定一栏,然后根据自己的编码习惯进行设置
image.png
image.png

4.5.2.3 设置prettier为格式化工具

设定编辑器默认代码格式化(美化)的插件为Prettier - Code formatter,
code => 首选项 =>设置
在搜索设置框贴入editor.defaultFormatter,将配置项选择为Prettier - Code formatter。
image.png

4.5.2.4 设置保存自动格式化

code => 首选项 =>设置
在搜索设置框贴入editor.formatOnSave,将配置项选择钩上;

到此,vscode配置完成。

5. 结语

以上,就完成了项目的格式化规则设置,当然,还可以设置ci或者git push代码时的检测,这里不再详细说明。
每个团队,想要不在代码格式冲突上产生矛盾,一套属于自己团队的代码规范十分有效!当然,还有其他的代码规范工具,那就仁者见仁,智者见智了,各位按需使用吧!

目录
相关文章
|
10月前
|
JSON 前端开发 Shell
前端项目添加代码规范(eslint prettier stylelint husky lint-staged commitlint)
前端项目添加代码规范(eslint prettier stylelint husky lint-staged commitlint)
215 0
|
JavaScript 前端开发
在VSCode中 使用 ESLint + Prettier检查代码规范及自动格式化前端Vue代码
般的代码格式化工作,ESLint完全可以胜任,为什么要用Prettier代替ESLint的代码格式化功能?简而言之,Prettier的代码格式化功能比ESLint更强大,配置更简单,通过配置,ESLint可以使用Prettier的代码规则进行校验,如果不配置好,会出现冲突,导致二者不能配合使用。 下面详细介绍如何配置ESLint+Prettier在VSCode中开发Vue代码:
938 0
在VSCode中 使用 ESLint + Prettier检查代码规范及自动格式化前端Vue代码
|
8月前
|
JavaScript 前端开发
ESlint + Stylelint + VSCode自动格式化代码(2023)
ESlint + Stylelint + VSCode自动格式化代码(2023)
183 0
|
4月前
|
JavaScript
prettier格式化问题
prettier格式化问题
30 0
|
5月前
|
JavaScript
解决eslint 报错的方法
解决eslint 报错的方法
82 1
|
9月前
|
JSON 前端开发 JavaScript
团队协作(一)—— 你不知道的 ESLint + Prettier1
团队协作(一)—— 你不知道的 ESLint + Prettier1
141 0
|
9月前
|
JavaScript IDE 开发工具
团队协作(一)—— 你不知道的 ESLint + Prettier3
团队协作(一)—— 你不知道的 ESLint + Prettier3
288 1
|
10月前
|
开发工具 git
如何将整个项目按照eslint格式化
如何将整个项目按照eslint格式化
328 0
|
10月前
|
前端开发 JavaScript 测试技术
如何在Vue3项目中集成ESLint+Prettier+Stylelint+Husky?
如何在Vue3项目中集成ESLint+Prettier+Stylelint+Husky?
410 0
|
前端开发
eslint && 自动修复eslint报错
eslint && 自动修复eslint报错
eslint && 自动修复eslint报错