Dream-Life
  • 首页
  • 技术
  • 小日记
  • 百宝盒
  • 小站
avatar
Eslint9搭配React的扁平化配置指南
avatarDream
2024-11-18
726次阅读
0个评论

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
评论一下吧!
avatarBgc
avatar
Dream-Life
treasure every day
文章6
类型9
标签10
Catalog
世上只有一种英雄主义,那就是看清生活真相后依然热爱生活。
湘ICP备19022890号-1
Copyright © 2023 DreamLife