本篇介绍的是如何作到在代码提交前,统一团队代码风格,检查代码质量,并修复一些低级错误。最终期待项目中的开发人员提交的代码都符合代码规范、风格统一。javascript
Git Hook + lint-staged + Prettier + ESLint,先介绍最终实现,具体每一个模块的做用和配置后面有各自的介绍。css
npm i --save-dev husky lint-staged prettier
npm i --save-dev eslint babel-eslint eslint-plugin-react
复制代码
.eslintrc
{
"env": {
"browser": true,
"es6": true
}
"eslint": "recommended",
"parserOptions": {
"ecmaFeatures": {
"jsx": true,
"impliedStrict": true
}
},
"plugin: react",
"rules": {
"quotes": [
"error",
"single"
]
}
}
复制代码
.prettier.js
module.exports = {
// 一行最多 100 字符
printWidth: 100,
// 使用 4 个空格缩进
tabWidth: 4,
// 不使用缩进符,而使用空格
useTabs: false,
// 行尾须要有分号
semi: false,
// 使用单引号
singleQuote: true,
// 对象的 key 仅在必要时用引号
quoteProps: 'as-needed',
// jsx 不使用单引号,而使用双引号
jsxSingleQuote: false,
// 末尾不须要逗号
trailingComma: 'none',
// 大括号内的首尾须要空格
bracketSpacing: true,
// jsx 标签的反尖括号须要换行
jsxBracketSameLine: false,
// 箭头函数,只有一个参数的时候,也须要括号
arrowParens: 'always',
// 每一个文件格式化的范围是文件的所有内容
rangeStart: 0,
rangeEnd: Infinity,
// 不须要写文件开头的 @prettier
requirePragma: false,
// 不须要自动在文件开头插入 @prettier
insertPragma: false,
// 使用默认的折行标准
proseWrap: 'preserve',
// 换行符使用 lf
endOfLine: 'lf'
}
复制代码
package.json
{
...
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.{js,jsx}": [
"prettier --write",
"eslint --fix",
"git add ."
]
},
...
}
复制代码
上面的配置只是一种组合方式的举例,还能够自由组合为多种检查方式,这里就不一一列举了。后面是对各个模块的介绍,感兴趣能够继续阅读。html
vscode
编辑器,在扩展中查找 Prettier - Code formatter
插件安装后便可使用。不一样编辑器的插件1. CMD + Shift + P -> Format Document
OR
1. Select the text you want to Prettify
2. CMD + Shift + P -> Format Code
复制代码
[图片上传失败...(image-4acd90-1575447043750)]java
建立规则文件:在根目录建立 .prettierrc
文件(支持 json 配置格式)或者 建立一个 .prettierrc.js
配置文件node
在 package.json
文件的 scripts
中添加对应的代码react
{
...
"scripts": {
"format": "prettier --write 'src/**/*.{js,jsx,css,less}'",
...
},
...
}
复制代码
npm run format
便可自动格式化配置范围内的全部文件ESLint 是一个代码检查工具,它可以被开发者灵活的配置,使其可以知足制定好的代码规范的要求,而且在编码过程当中实时检测输入的代码,对于不符合代码规范的代码警告或报错。git
.eslintrc.js
并导出包含您的配置的对象。.eslintrc.yaml
或.eslintrc.yml
定义配置结构。.eslintrc.json
定义配置结构。.eslintrc
,能够是 JSON 或 YAML。eslintConfig
在你的package.json
文件中建立一个属性并在那里定义你的配置。脚本设计运行的环境。每一个环境都带有一组预约义的全局变量。es6
"env": {
"browser": true,
"node": true
}
复制代码
脚本在执行期间访问的其余全局变量。github
"globals": {
"React": true,
"MtaH5": true,
"TencentGDT": true
}
复制代码
ESLint容许你指定你想要支持的JavaScript语言选项。默认状况下,ESLint须要ECMAScript 5语法。您能够覆盖该设置,以使用解析器选项启用对其余ECMAScript版本以及JSX的支持。npm
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module", // 设置为`"script"`(默认)或者`"module"`您的代码位于ECMAScript模块中。
"ecmaFeatures": { // 一个对象,指示您想要使用哪些其余语言功能
"jsx": true, // 启用JSX
"impliedStrict": true // 启用全局严格模式
}
},
复制代码
要在配置文件中配置插件,请使用
plugins
包含插件名称列表的密钥。该eslint-plugin-
前缀能够从插件名称被省略。
"plugins": [
"react",
"eslint-plugin-react"
]
复制代码
扩展就是直接使用别人已经写好的 lint 规则,
rules
属性中配置的规则都是基于这个规则之上配置的
"extends": [
"standard"
"eslint:recommended",
"plugin:react/recommended"
],
复制代码
推荐的扩展配置:
standardjs、airbnb、eslint-config-alloy
ESLint 附带有大量的规则。你可使用注释或配置文件修改你项目中要使用的规则。要改变一个规则设置,你必须将规则 ID 设置为下列值之一
"off"
或 0
: 关闭规则"warn"
或 1
: 开启规则,使用警告级别的错误(不会致使程序退出)"error"
或 2
: 开启规则,使用错误级别的错误(当被触发的时候,程序会退出)"rules": {
"strict": 2,
}
复制代码
将运行命令添加到 package.json
的 scripts
脚本中,设置对 src 目录下的文件进行检查
{
...
"scripts": {
"lint": "eslint ./src"
"lintFix": "eslint ./src --fix"
},
...
}
复制代码
在控制台运行以下命令:
// 代码检查
npm run lint
// 代码检查并修复
npm run lintFix
复制代码
和其它版本控制系统同样,Git 能在特定的重要动做发生时触发自定义脚本。这里介绍的是提交工做流钩子
pre-commit
git commit --no-verify
来绕过这个环节prepare-commit-msg
将配置添加到 package.json
中,执行命令添加到 scripts
脚本中:
{
"scripts": {
"lint": "eslint ./ --cache --ignore-pattern .gitignore",
"precommit-msg": "echo 'Pre-commit checks...' && exit 0"
},
"pre-commit": [ "precommit-msg", "lint" ],
"devDependencies": {
"eslint": "^2.12.0",
"pre-commit": "^1.1.3"
}
}
复制代码
在咱们的 package.json
中配置 husky,而且在对应的 git hook 阶段来执行对应的命令。所以,不用繁琐的去配置 git hook 阶段的脚本文件了。
{
"husky": {
"hooks": {
"pre-commit": "npm test",
"pre-push": "npm test"
}
}
}
复制代码
lint-staged的做用是每次提交只检查本次提交所修改的文件,其中 staged 是 Git 里面的概念,指待提交区,使用 git commit -a
,或者先 git add
而后 git commit
的时候,你的修改代码都会通过待提交区。
// package.json
{
...
"scripts": {
"precommit": "lint-staged", // git commit 执行这个命令,这个命令在调起 lint-staged
},
"lint-staged": { // lint-staged 配置
"src/**/*.{js,jsx}": [
"prettier --write",
"eslint --fix",
"git add"
]
},
...
}
复制代码
上面整理了一些项目实践过程当中的方式和方法。方法的使用能够提升项目的质量。有规范的代码,必定程度能够减小问题的发生。代码的可读性也有所提升。