共计 3664 个字符,预计需要花费 10 分钟才能阅读完成。
前言
当我们来到一个新的团队,或者接手一个新的项目时,一定会遇到代码规范的问题。随着前端应用越来越复杂,代码规范的问题也日益得到大家的重视。本文就带着大家来从 0 开始整合一个 React 前端应用的相关配置。
项目实例代码可以参考:eslint-prettier-react-demo
创建项目
首先,我们使用官方提供的脚手架 create-react-app 来创建一个项目:
npx create-react-app eslint-prettier-react-demo/
cd eslint-prettier-react-demo/
Eslint
安装依赖
Eslint 是一个可以检验代码,并给出报告的工具。它的目标是保证代码的一直性,避免错误。Eslint 为我们提供了 ECMAScript/JavaScript 规范的代码校验,我们可以根据个人 / 团队的代码风格进行配置,也可以使用开源的配置方案,本文会采用 eslint-config-airbnb
来配置。
Eslint 的强大得益于它活跃的开源社区,以及灵活的插件机制。本文中,我们需要去配置一个 React 项目,就可以去选择一些开源社区合适的插件,来帮助我们完成目标。
- eslint-plugin-import:此插件主要为了校验
import/export
语法,防止错误拼写文件路径以及导出名称的问题 - eslint-plugin-jsx-a11y:提供
jsx
元素可访问性校验 - eslint-plugin-react:校验 React
- eslint-plugin-react-hooks:根据 Hooks API 校验 Hooks 的使用
接下来,我们安装这些依赖:
npm i -D eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks
修改配置文件
下面,让我们需要根据 Eslint 的文档来配置这些插件。在控制台运行下面命令:
./node_modules/.bin/eslint --init
我们可以根据项目的需求,来选则相应的配置。执行完毕之后可以看到项目的根目录多了一个 .eslintrc.js
文件。
Eslint 支持多种格式的配置文件,优先级如下:
- 1、.eslintrc.js
- 2、.eslintrc.yaml
- 3、.eslintrc.yml
- 4、.eslintrc.json
- 5、.eslintrc
- 6、package.json
我们使用官方推荐的 .eslintrc.js
格式就好。
接下来,让我们使用喜欢的编辑器来打开这个文件,为了便于理解,我增加了一些注释:
module.exports = {
// 为我们提供运行环境,一个环境定义了一组预定义的全局变量
"env": {
"browser": true,
"es6": true
},
// 一个配置文件可以被基础配置中的已启用的规则继承。"extends": ["airbnb"],
// 自定义全局变量
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly",
"_": true,
"$": true,
},
// ESLint 默认使用 Espree 作为其解析器,你可以在配置文件中指定一个不同的解析器
// "parser": "@typescript-eslint/parser",
// 配置解析器支持的语法
"parserOptions": {
"ecmaFeatures": {"jsx": true},
"ecmaVersion": 2018,
"sourceType": "module"
},
// ESLint 支持使用第三方插件。在使用插件之前,你必须使用 npm 安装它。// 在配置文件里配置插件时,可以使用 plugins 关键字来存放插件名字的列表。插件名称可以省略 eslint-plugin- 前缀。"plugins": [
"react",
// "@typescript-eslint"
],
// ESLint 附带有大量的规则。你可以使用注释或配置文件修改你项目中要使用的规则。要改变一个规则设置,你必须将规则 ID 设置为下列值之一:// "off" 或 0 - 关闭规则
// "warn" 或 1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出)
// "error" 或 2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出)
"rules": {
semi: 0,
'no-unused-vars': [
1,
{
vars: 'all',
args: 'after-used',
ignoreRestSiblings: true,
varsIgnorePattern: '^_',
argsIgnorePattern: '^_|^err|^ev' // _xxx, err, error, ev, event
}
],
'no-useless-escape': 2,
}
};
Prettier
我们可以借助 Eslint 来提高我们编码的质量,但是却无法保证统一代码风格。一个统一的代码风格对于团队来说是很有价值的,所以为了达到目的,我们可以选择使用 Prettier
在保存和提交代码的时候,将代码修改成统一的风格。这样做同时也降低了 Code Review 的成本。它不会代替 Eslint,所以需要和 Eslint 搭配使用。
配置应用
1、安装依赖
npm i -D prettier eslint-config-prettier eslint-plugin-prettier
2、修改 Exlint 配置,打开 .eslintrc.js
文件,在扩展中增加 “plugin:prettier/recommended”:
"extends": [
"airbnb",
"plugin:prettier/recommended"
]
3、增加 prettier 配置文件,在根目录创建 .prettierrc.js
:
module.exports = {
"printWidth": 120, // 一行的字符数,如果超过会进行换行,默认为 80
"tabWidth": 2, // 一个 tab 代表几个空格数,默认为 2
}
提交时校验
如果,我们想要使用 git
提交代码时,通过 prettier 来优化代码,还需要借助一些工具来完成。
- husky:一个方便用来处理
pre-commit
、pre-push
等 githooks 的工具 - lint-staged:对 git 暂存区的代码,运行 linters 的工具
1、安装依赖
npm i lint-staged husky -D
2、增加配置
// package.json
{
...
"husky": {
"hooks": {"pre-commit": "lint-staged"}
},
"lint-staged": {"src/*.{js,jsx,mjs,ts,tsx}": [
"node_modules/.bin/prettier --write",
"node_modules/.bin/eslint --fix",
"git add"
],
"src/*.{css,scss,less,json,html,md,markdown}": [
"node_modules/.bin/prettier --write",
"git add"
]
}
...
}
3、测试 commit 命令
这是我们尝试增加一个组件,并提交代码。这时发现提交不了,有报错:
这个是因为 prettier 的默认规则,和 airbnb
规则不一致导致的。
这里可以参考 git 示例中的配置,调整一下 .eslintrc.js
文件即可。
这时候再提交代码就会看到:
配置 VS Code 编辑器
1、在 VS Code 商店中寻找并安装插件 ESlint,Prettier
2、编辑 settings.json
,通过下面路径,可以找到相应的配置文件:
-
Windows
%APPDATA%\Code\User\settings.json
-
macOS
$HOME/Library/Application Support/Code/User/settings.json
-
Linux
$HOME/.config/Code/User/settings.json
然后增加如下参数:
"files.autoSave": "onFocusChange",
"editor.formatOnSave": true,
"editor.formatOnType": true,
"eslint.autoFixOnSave": true,
"eslint.enable": true,
这样当我们在保存文件的时候,就会自动优化文件格式了。
到这里,整个项目的搭建,以及编辑器的设置就完成了!????????????
参考
- How to integrate Eslint & Prettier in React
- 使用 ESLint && Prettier 规范代码格式
- 使用 ESLint+Prettier 来统一前端代码风格
- 使用 ESLint+Prettier 规范 React+Typescript 项目
- ESLint 在中大型团队的应用实践
- prettier
- eslint