学习在 React 中配置 ESLINT 和 PRETTIER
更漂亮🗽
哈士奇🐶
为什么检查代码很重要?
Linting 将会检查代码但不执行它。
检查器最好的部分是发现代码中看起来不像的潜在错误。
ESLint ✍️
ESLint 会解析您的代码,对其进行分析,并运行 linting 规则。这些规则可能会触发警告或错误,让您知道代码是否正确。
例子:
// ❌ Oops, what is multiple?
const output = multiple(1, 2);
ESLint 无法理解 add 所指的内容,因此会抛出错误。你需要显式声明 add 来更正它:
// ✅ Correct
function multiple() {}
const output = multiple(1, 2);
安装 Eslint:
全球
$ npm install eslint -g
或者
$ npm install eslint eslint-plugin-react lint-staged --save-dev
注意:如果您使用的是 VS Code,请安装插件:VSCode 的 ESLint 扩展。它将直接在代码中高亮显示错误和警告。
配置 ESLint ⚙︎
ESLint 具有高度可配置性。只需.eslintrc
在项目根目录下添加文件,即可在任何需要的文件上运行 ESLint。
如果您想跳过某些代码的 eslint,请在代码中添加注释:// eslint-disable-next-line
例如:
// eslint-disable-next-line
const result = multiple(1, 2);
注意:请谨慎使用,每次发现错误时禁用 ESLint 是一个非常糟糕的主意。
ESLint CLI ☀︎
ESLint 有一个命令行界面 (CLI) 来检查文件是否正确。你可以在ESLint 的文档中找到所有选项。你最常用的选项是--fix
“在 ESLint 可以修复文件时”的选项。
包.json:
{
"scripts": {
"pre-commit": "lint-staged",
"lint": "eslint .", // lint the codebase
},
"lint-staged": {
"*.+(js|jsx)": [
"eslint --fix", // try to fix whatever it can fix
]
}
}
ESLint 配置 ⚙︎
.eslintrc.js:
// eslint-disable-next-line no-undef
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: ["eslint:recommended", "plugin:react/recommended"],
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: "module",
},
plugins: ["react"],
rules: {
"no-console": "warn",
"import/first": "error"
"react/prop-types": 0,
"linebreak-style": ["error", "unix"]
},
}
添加上述代码片段后,会出现类型错误。要修复此问题,请添加:
.eslintrc.js:
// eslint-disable-next-line no-undef
module.exports = {
...
}
上述 ESLint 配置满足以下要求:
- 包含推荐的 ESLint 规则
- 包括
es6
和browser
的全局变量 - 如果使用
console.log
- 包含 导入 插件并 报告非导入语句之后的任何导入
- 指示您正在使用 ES2020 语法的解析器
查看CRA以获得更多有趣的配置。
更漂亮🗽
它有助于格式化代码库。
使用 Prettier,我们可以遵循常见的代码风格。
安装 Prettier:
$ npm install prettier --save-dev
笔记:
如果您使用的是 VS Code,请安装插件:VSCode 的 Prettier 扩展。它将直接在代码中高亮显示错误和警告。
配置 Prettier ⚙︎
它会格式化你的代码,但有时你可能不喜欢这样。你可以使用 prettier 配置文件,.prettierrc
或者通过prettier
package.json 中的 key 来修改。
singleQuote
:true
如果您想使用单引号,false
否则。printWidth
:指定打印机将换行的行长度的数字。semi
:true
如果您想在每个语句的末尾打印分号,false
否则。
看看这个以获得更漂亮的选择。
.eslintrc.js:
extends: ["prettier"],
plugins: ["prettier"],
rules: {
"prettier/prettier": "error",
"linebreak-style": ["error", "unix"],
"arrow-body-style": "off",
"prefer-arrow-callback": "off",
},
}
Prettier CLI ☀︎
使用与eslint--write
类似的选项。--fix
包.json:
{
"lint-staged": {
"*.+(js|jsx)": [
"prettier --write --ignore-unknown"
],
"*.+(json|css|md)": [
"prettier --write"
]
}
}
在 Vscode 中启用 formatOnSave
查找 formatOnSave 并选中复选框,或者将此行添加到settings.json
:
"editor.formatOnSave": true,
将 Prettier 与 ESLint 集成⛩
ESLint也有格式规则,例如 max-len(类似于 printWidth)或引号。
Prettier取代了 ESLint 的格式规则,但并没有取代代码质量规则。
因此,您可以通过安装以下内容来集成到Prettier
您的配置中:ESLint
$ npm install eslint-config-prettier eslint-plugin-prettier --save-dev
eslint-config-prettier
禁用与 Prettier 冲突的规则。同时eslint-plugin-prettier
添加使用 Prettier 格式化内容的规则。您可以使用推荐的配置来启用此配置:
.eslintrc.js:
{
"extends": ["plugin:prettier/recommended"]
}
更漂亮的配置:
.prettierrc.json:
{
"printWidth": 85,
"arrowParens": "always",
"semi": false,
"tabWidth": 2
}
基本上,这意味着 Prettier:
- 超过 85 个字符的行将换行。
- 即使只有一个参数,也总是在箭头函数周围使用括号。
- 不会在每个语句的末尾打印分号。
- 每个缩进级别将使用两个空格。
每次提交时进行 Lint 和格式化
你可以对代码库进行 lint 和运行,这很棒。但这是否意味着你现在应该随时对代码进行 lint 和格式化?不!
如果您使用 GIT,则可以利用Git 钩子在每次提交或推送之前运行 ESLint 和 Prettier。
哈士奇🐶
这不是狗。我们讨论的是可以让你轻松设置 Git Hooks 的工具
假设您的 package.json 有以下脚本,并且您想在每次提交时运行 lint 和 format:
包.json:
{
"scripts": {
"postinstall": "husky install && cd app && yarn install",
},
"devDependencies": {
"husky": "^6.0.0",
}
}
- 安装 Husky 作为开发依赖项:
然后,您可以通过两个简单的步骤添加 Git hooks:
- 安装 Husky
-
添加预提交
-
安装 Husky
$ npm install husky --save-dev
- 添加预提交通过两种方法向您的项目添加预提交:
方法 1:
在根目录下创建 .husky 并预提交文件:
.husky/预提交:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
yarn run pre-commit
方法 2:
在你的 package.json 中插入以下代码:
package.json
{
"husky": {
"hooks": {
"pre-commit": "npm run lint && npm run format"
}
}
}
就这样。每次提交时,与 pre-commit 关联的命令都会运行。这样你的代码库就会被 lint 和格式化。
pre-commit
是目前为止使用最多的 Git 钩子,但您也可以使用其他钩子,如pre-push
或post-commit
。
lint-staged 🚀
代码库越大,lint 和格式化的时间就越长。想象一下,你有超过 1000 个组件。你肯定不想等着 ESLint 把所有代码库都 lint 一遍,对吧?最终,只需要 lint 那些刚刚被修改过的文件。为此,你可以使用lint-staged。
安装lint-staged
:
$ npm install --save-dev lint-staged
然后,您必须在文件lint-staged
中添加一个用于配置的键package.json
。根据lint-staged 文档,该配置应该是一个对象,其中每个值代表一个或多个要运行的命令,而其键是用于这些命令的 glob 模式。
包.json:
{
"lint-staged": {
"*.+(js|jsx)": "eslint --fix",
"*.+(json|css|md)": "prettier --write"
}
}
上述配置将允许你运行 ESLint 并修复 .js 和 .jsx 文件。同时,它将对 .json、.css 和 .md 文件运行 Prettier。
然后,让我们告诉 ESLint 我们将使用 Prettier 的配置:
.eslintrc.js:
{
extends: ["prettier"],
plugins: ["react", "prettier"]
}
完成后,我们需要指定 Prettier 的选项。为此,您可以创建一个文件,或者在 中.prettierrc
添加一个键。我们选择第一个选项:prettier
package.json
.prettierrc.json:
{
"semi": false,
"singleQuote": false,
"tabWidth": 2,
"printWidth": 80
}
让我们在暂存文件上添加预提交钩子。lint-staged
为此,我们需要在 devDependencies 中安装 husky 和 husky:
$ npm install --save-dev husky lint-staged
pre-commit
然后,我们通过添加一个husky
键来添加钩子本身package.json
:
包.json
{
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}
}
如果我们保持原样,它将会失败,因为我们没有指定 lint-staged 的配置,所以让我们立即执行此操作:
{
"lint-staged": {
"*.+(js|jsx)": [
"eslint --fix",
"prettier --write --ignore-unknown"
],
"*.+(json|css|md)": [
"prettier --write"
]
}
}
这里我们使用 ESLint 来检查和格式化 JS 和 JSX 文件。我们还使用 Prettier 来格式化 json、css 和 markdown 文件。一切就绪!
以下是完整package.json
文件:
包.json
{
"name": "react-eslint-prettier-app",
"version": "0.1.0",
"private": true,
"dependencies": {
...
},
"scripts": {
"postinstall": "husky install && cd app && yarn install",
"test": "cd app && yarn test",
"pre-commit": "lint-staged",
...
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.+(js|jsx)": [
"eslint --fix",
"prettier --write --ignore-unknown"
],
"*.+(json|css|md)": [
"prettier --write"
]
}
"devDependencies": {
"eslint": "^7.24.0",
"eslint-config-prettier": "^8.1.0",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-react": "^7.23.2",
"husky": "^6.0.0",
"lint-staged": "^10.5.4",
"prettier": "2.2.1",
}
}
.eslintrc.js:
// eslint-disable-next-line no-undef
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: ["eslint:recommended", "plugin:react/recommended", "prettier"],
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: "module",
},
plugins: ["react", "prettier"],
rules: {
"prettier/prettier": "error",
"react/prop-types": 0,
"linebreak-style": ["error", "unix"],
"arrow-body-style": "off",
"prefer-arrow-callback": "off",
},
}
笔记:
进行上述更改后,如果代码不起作用,请重新启动代码编辑器。
文章来源:https://dev.to/suprabhasupi/learn-to-configure-eslint-and-prettier-in-react-4gp0