1.开篇
说到Eslint,作为前端基本都不陌生,就不多做讲解,这篇文章的还涉及到Prettier
具体可以参考如下网站,
网站 | 地址 |
---|---|
Eslint官网 | Eslint |
prettier官网 | prettier |
可以简单理解为Eslint对语法检测、限制和修复,Prettier对代码按照eslint的要求格式化,所以常常搭配一起使用。
ESLint
是一个用于识别和报告在ECMAScript
/JavaScript
代码中发现的模式的工具,其目标是使代码更加一致并避免错误。
2.相较于Eslint9的更新
不再支持Node < v18.18.0
版本了
以前的老版本的node已经跑不起来最新的Eslint9
了
配置文件格式的改动
- 全面采用扁平配置系统,移除旧版层级配置
- 移除对 .eslintrc 文件的支持
- 现配置文件更改为
eslint.config.js
|eslint.config.cjs
|eslint.config.mjs
- 配置文件必须使用
ESM
格式了
主要我们使用者只需要关心上面2个,至于Api方面可以去官网查找。
关于配置文件改动肯定是最大的一部分,因为很多插件是还没适配过来的,官网有一篇配置迁移指南可以参考 Eslint9的配置迁移指南
3.需要使用到的Npm包
开发依赖包职责说明
包名 | 主要职责 |
---|---|
eslint |
JavaScript/TypeScript 代码检查工具,发现并修复代码问题,确保代码质量和一致性 |
eslint-plugin-prettier |
将 Prettier 作为 ESLint 规则运行,使代码格式化和检查规则能够统一 |
eslint-plugin-react |
专门用于 React 代码的 ESLint 规则集,检查 React 特定的代码规范 |
eslint-plugin-react-hooks |
强制执行 React Hooks 的规则,确保 Hooks 的使用符合规范 |
eslint-plugin-react-refresh |
支持 React Fast Refresh(热重载)功能的 ESLint 插件,提升开发体验 |
globals |
提供常见的全局变量定义,用于 ESLint 配置中声明全局变量 |
prettier |
代码格式化工具,用于统一代码风格和格式 |
@typescript-eslint/eslint-plugin |
TypeScript 特定的 ESLint 规则集,用于检查 TypeScript 代码 |
@typescript-eslint/parser |
使 ESLint 能够解析 TypeScript 代码的解析器 |
4.配置示例文件
1.eslint.config.js
javascript
import globals from 'globals';
import tsEslintParser from '@typescript-eslint/parser';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import pluginReact from 'eslint-plugin-react';
import reactRefresh from 'eslint-plugin-react-refresh';
import hooksPlugin from 'eslint-plugin-react-hooks';
import eslintPluginPrettier from 'eslint-plugin-prettier';
export default [
{
// 指定适用于哪些文件
files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
languageOptions: {
// 使用 TypeScript 解析器
parser: tsEslintParser,
parserOptions: {
ecmaFeatures: {
jsx: true, // 开启 JSX 语法支持
},
},
// 定义全局变量,适配浏览器环境
globals: {
...globals.browser,
},
sourceType: 'module', // 使用模块化方式,支持 ES6 模块导入/导出
},
plugins: {
// 启用 React 插件
react: pluginReact,
// 启用 React Hooks 插件
'react-hooks': hooksPlugin,
// 启用 React Refresh 插件(用于热更新)
'react-refresh': reactRefresh,
// 启用 TypeScript ESLint 插件
'@typescript-eslint': typescriptEslint,
// 启用 Prettier 插件
prettier: eslintPluginPrettier,
},
rules: {
// Prettier 规则:规范代码格式,确保一致性
'prettier/prettier': [
'error',
{
singleQuote: true, // 使用单引号
semi: true, // 强制使用分号
tabWidth: 2, // 使用 2 个空格作为缩进
},
],
// React 规则
'react/jsx-indent': [1, 2], // 强制 JSX 标签使用 2 个空格缩进
'react/jsx-uses-react': 'off', // React 17+ 开启了 JSX 自动导入,取消此规则
'react/react-in-jsx-scope': 'off', // React 17+ 开启了 JSX 自动导入,取消此规则
// React Hooks 规则:确保正确使用 Hooks(遵循推荐规则)
...hooksPlugin.configs.recommended.rules,
// React Refresh 规则:建议仅导出 React 组件以支持热更新
'react-refresh/only-export-components': 'warn',
// 通用规则
'arrow-body-style': ['error', 'as-needed'], // 推荐使用简化版箭头函数,例如直接返回值,不使用 `{}` 包裹
'prefer-arrow-callback': 'error', // 强制使用箭头函数作为回调函数,避免使用 `function()` 语法
'no-template-curly-in-string': 1, // 不允许在字符串中使用模板字面量(例如:'Hello ${name}')
'@typescript-eslint/no-explicit-any': 'warn', // 警告使用 `any` 类型,但不强制报错,鼓励使用更明确的类型
'no-magic-numbers': 'warn', // 警告硬编码的魔法数字(例如:`const x = 3`),建议使用常量代替
},
},
];
这只是我自己使用的规则,具体细节规则,可以根据你们的团队去配置,毕竟他是一个约定工具!
2.prettierrc
Json
{
// 启用 ESLint 与 Prettier 集成
"eslintIntegration": true,
// 设置每行代码的最大字符宽度为 120(避免长行)
"printWidth": 120,
// 每次缩进的空格数,设置为 2 个空格
"tabWidth": 2,
// 不使用 Tab 字符来进行缩进,而是使用空格
"useTabs": false,
// 强制使用单引号(例如:'hello' 而不是 "hello")
"singleQuote": true,
// 在不同操作系统之间自动调整换行符
"endOfLine": "auto"
}
3.package.json
Json
"scripts": {
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
},
eslint .
:表示在当前目录下(及其子目录)运行 ESLint。--ext .ts,.tsx
:仅检查.ts
和.tsx
文件。--report-unused-disable-directives
:报告未使用的 ESLint 禁用指令。--max-warnings 0
:将警告数限制为 0,意味着一旦有警告就会报错。
添加一条lint命令来执行检查全部代码
5.主要更新的问题
其实主要还是配置迁移是主要问题,不过现在很多库也支持扁平配置了,所以可以大胆放心用了,
Vue
这边也是大差不差,更换对应的库以及规则和插件就可以了。
文章最后更新于 2024-12-23 01:08
评论一下吧!