代码规范 -- eslint & editorconfig

配置eslint

安装

安装eslint;webpack配置用到的eslint-loader;eslint用于解析js的解析器babel-eslint
npm i eslint eslint-loader babel-eslint -Dnode

以airbnb为eslint的配置规则
npm i eslint-config-airbnb -D
及其所须要的插件
npm i eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react -Dreact

node环境、es6环境下的插件
npm i eslint-plugin-node eslint-plugin-promise -Dwebpack

配置.eslintrc

在项目根目录下新建.eslintrc文件,开始配置。git

{
  // 指定js解析器
  "parser": "babel-eslint",

  // 定义ecma版本;sourceType定义为模块化的js编写模式
  "parserOptions": {
    "ecmaVersion": 6,
    "sourceType": "module"
  },

  // 定义运行环境,如不配置browser为true则会报出window、document变量未定义的错误。同时须要配置node为true,由于项目基于webpack构建会用到node中的如process全局变量。
  "env": {
    "browser": true,
    "node": true,
    "es6": true
  },

  // 运用airbnb规则,标准规则为standard
  "extends": "airbnb", 

  // 自定义规则
  "rules": {
    "semi": [0] // 是否对结尾分号进行检测 -- 0为不检测
  }
}

配置webpack

module: {
  rules: [{
    test: /\.jsx?$/,
    exclude: /node_modules/,
    use: ['babel-loader', 'eslint-loader']
  }]
}

注意loader的执行顺序为从右到左,eslint-loader需在最右,先进行了eslint验证再进行babel的编译。es6

接着咱们来走一波,而后发现了大量的报错,其中最为多的是这个东西👇web

Expected linebreaks to be 'LF' but found 'CRLF'

clipboard.png

这个就是不一样系统下的换行符会有所不一样,windows的是CRLF,解决这个问题就须要用到editorconfig了npm

配置editorconfig

安装插件 -- vscode下

市场里直接搜索EditorConfig for VS Code安装。json

配置.editorconfig文件

项目根目录下建立.editorconfig文件,而且配置windows

# 是不是顶级配置文件,设置为true的时候才会中止搜索.editorconfig文件
root = true

[*]
charset = utf-8
# 末尾行去掉尾随的空格
trim_trailing_whitespace = true 
# 末尾行后加多一行空行
insert_final_newline = true 
# <"tab" | "space"> 制表符类型
indent_style = space  
indent_size = 2
# <"lf" | "cr" | "crlf"> 换行符类型
end_of_line = lf

项目中使用eslint

eslint报错分析

clipboard.png

如上,分别为:
报错的行数 / 错误类型 / 错误描述 / 对应的eslint规则promise

忽略eslint检测

有时候咱们不须要对某些代码进行eslint检测,这时咱们能够加上eslint注释👇

export default class App extends React.Component { // eslint-disable-line
  render() {
    return <div>Home</div>;
  }
}

结合git使用eslint

咱们在代码提交前但愿先用eslint检测一遍代码,若是不经过则禁止提交代码。
实施方法以下👇

一、安装工具husky来设置git钩子 npm i husky -D
二、配置package.json文件

// husky提供的钩子
"husky": {
  "hooks": {
    // 在执行git commit以前先执行pre-commit,也就是执行eslint检测,若不成功不能进入git commit
    "pre-commit": "npm run lint"
  }
},
"scripts": {
  // eslint检测src目录下的全部拓展名为js和jsx的文件
  "lint": "eslint --ext .js  --ext .jsx src/"
}

结果就是这样👇

clipboard.png

eslint报错了就直接不给commit

相关文章
相关标签/搜索