首页 > 其他分享 >eslint airbnb React18+typescript 依赖循环、import自动排序分组

eslint airbnb React18+typescript 依赖循环、import自动排序分组

时间:2023-10-04 14:33:55浏览次数:48  
标签:react typescript off plugin airbnb eslint import

eslint终极规范 爱彼迎 eslint-config-airbnb

请先阅读完下以下链接在来配置
代码规范之什么是eslint,为什么要使用eslint

eslint 的配置项过多,针对js、ts、vue、jsx、tsx等等不同的规则,小公司或者个人项目可以使用成熟的eslint社区规范,如airbnb、standard、goole等。

这里我们介绍社区使用最多的airbnb 规范。

项目介绍

项目中使用到了 react18 + router6 + reudxtoolkit + vite4 + typescript

1. 开发依赖

除了常规的依赖,还需要一些依赖以支持对typescript 的支持

"devDependencies":{
	"eslint": "^8.50.0",
	"eslint-config-airbnb": "^19.0.4",
	"eslint-config-airbnb-typescript": "^17.1.0",
	"eslint-config-prettier": "^9.0.0",
	"eslint-import-resolver-typescript": "^3.6.1",
	"eslint-plugin-import": "^2.28.1",
	"eslint-plugin-jsx-a11y": "^6.7.1",
	"eslint-plugin-prettier": "^5.0.0",
	"eslint-plugin-react": "^7.33.2",
	"eslint-plugin-react-hooks": "^4.6.0",
}

2. .eslintrc.cjs 文件配置

思路:总体是在airbnb的基础上去掉了一些过于严格的规则,增加一些自身需要的配置(如导入排序)

// @see: https://zh-hans.eslint.org
module.exports = {
  // 设置为true表示该配置文件是根配置文件,ESLint将停止在父目录中查找其他配置文件。
  root: true,
  // 指定脚本运行的环境,可以是浏览器、Node.js或ES6等。这些环境会提供一组预定义的全局变量。
  env: {
    browser: true,
    node: true,
    es6: true
  },
  /* 配置一些特定的设置,例如React的版本和import配置 */
  settings: {
    react: {
      version: "detect"
    },
    "import/parsers": {
      "@typescript-eslint/parser": [".ts", ".tsx"]
    }
  },
  /* 告诉 ESLint 使用您安装的 @typescript-eslint/parser 包来解析源文件。必填的。 */
  parser: "@typescript-eslint/parser",
  /* 配置解析器的选项,例如指定ECMAScript版本、源代码类型和JSX的pragma。 */
  parserOptions: {
    ecmaVersion: "latest",
    sourceType: "module",
    jsxPragma: "React",
    ecmaFeatures: {
      jsx: true
    },
    project: true,
    tsconfigRootDir: __dirname
  },
  /*  指定要使用的插件,这里使用了React、TypeScript、Prettier插件。 */
  plugins: ["react", "@typescript-eslint", "prettier"],
  /*  扩展现有的规则集,这里使用了一些推荐的规则集 */
  extends: [
    // "plugin:@typescript-eslint/stylistic",
    // "plugin:@typescript-eslint/stylistic-type-checked",
    "eslint:recommended",
    "airbnb",
    "airbnb-typescript",
    "plugin:@typescript-eslint/recommended-type-checked",
    "plugin:react/jsx-runtime",
    "plugin:react-hooks/recommended",
    "plugin:prettier/recommended"
  ],
  /* 配置具体的规则 */
  rules: {
    // react (https://github.com/jsx-eslint/eslint-plugin-react)
    "react-hooks/rules-of-hooks": "error", // 设置为"error",确保在组件或自定义钩子中调用Hooks。
    "react-hooks/exhaustive-deps": "off", // 设置为"off",不需要对useEffect和useCallback的依赖项进行详尽检查。
    "react/function-component-definition": ["error", { namedComponents: "arrow-function", unnamedComponents: "arrow-function" }], // 强制箭头函数定义
    "react/prop-types": "off",
    "react/require-default-props": "warn", // props默认值
    "@typescript-eslint/no-floating-promises": "off", // 禁用必须处理Promise
    "@typescript-eslint/no-explicit-any": "off", // 设置为"off",允许使用any类型。
    "@typescript-eslint/restrict-template-expressions": "off",
    "no-plusplus": ["error", { allowForLoopAfterthoughts: true }],
    "jsx-a11y/anchor-is-valid": "off",
    "jsx-a11y/click-events-have-key-events": "off",
    "jsx-a11y/no-static-element-interactions": "off",
    "consistent-return": "off",
    "react/jsx-props-no-spreading": "off",
    "no-nested-ternary": "off",
    "no-param-reassign": ["error", { props: true, ignorePropertyModificationsFor: ["state"] }],
    "no-restricted-syntax": "off",
    // eslint-plugin-import (https://github.com/import-js/eslint-plugin-import)
    "import/no-extraneous-dependencies": "off",
    "import/no-mutable-exports": "off",
    "import/extensions": "off", // 禁用eslint-plugin-import 的后文件名后缀检查
    // "import/no-unresolved": "error",
    "import/no-cycle": "error", // 禁止循环依赖
    // import自动排序
    "import/order": [
      "error",
      {
        groups: ["builtin", "external", "internal", ["parent", "sibling"]],
        pathGroups: [
          {
            pattern: "react",
            group: "external",
            position: "before"
          }
        ],
        pathGroupsExcludedImportTypes: ["react"],
        "newlines-between": "always",
        alphabetize: {
          order: "asc",
          caseInsensitive: true
        }
      }
    ]
  },
  // 忽略
  overrides: [
    {
      files: ["*.js", "*.cjs"],
      extends: ["plugin:@typescript-eslint/disable-type-checked"]
    }
  ]
};

导入排序效果如图
按群组自动分类,字母生序排列,一清二楚。

import { useEffect } from "react";

import { App as AppProvider, ConfigProvider, theme } from "antd";
import enUS from "antd/locale/en_US";
import zhCN from "antd/locale/zh_CN";
import dayjs from "dayjs";
import { I18nextProvider } from "react-i18next";
import { shallowEqual } from "react-redux";

import { RefreshProvider } from "@/contexts/Refresh";
import i18n from "@/languages";
import { useAppDispatch, useAppSelector } from "@/redux/hook";
import { LanguageType } from "@/redux/interface";
import { setGlobalState } from "@/redux/reducer/globalSlice";
import RouterProvider from "@/routers";
import { getBrowserLang } from "@/utils";

import "dayjs/locale/zh-cn";

vscode配置项setting.json 别忘了配置保存后自动排序

   // 在保存文件时,针对样式文件使用 stylelint 进行自动修复 和 导入自动排序。
   "editor.codeActionsOnSave": {
    "source.fixAll.stylelint": true,
    "source.organizeImports": true
   },

标签:react,typescript,off,plugin,airbnb,eslint,import
From: https://www.cnblogs.com/wanglei1900/p/17742228.html

相关文章

  • 【前端规范全攻略】开启高效开发之旅!ESLint + Prettier + husky + lint-staged+Commit
    本文从两个方向出发:1、git提交规范;2、代码风格统一假如团队中的小伙伴在提交代码时没有遵循规范要求,例如只写了一个"修改"或"更新,这会给团队中其他小伙伴造成困扰呢,不得不花时间查看代码和推测逻辑。不仅会浪费了时间和精力,可能会导致以下问题:可读性差维护困难变更历史不......
  • ypeScript入门到精通——TypeScript类型系统基础——枚举类型
    TypeScript类型系统基础——枚举类型 枚举类型由零个或多个枚举成员构成,每个枚举成员都是一个命名的常量。 在TypeScript中,枚举类型是一种原始类型,它通过enum关键字来定义。例如,我们可以使用枚举类型来表示一年四季,示例如下:enumSeason{Spring,Summer,......
  • TypeScript入门到精通——类型系统基础——类型检查
    TypeScript类型系统基础——类型检查  类型检查是检查程序中类型约束是否正确的过程。类型检查既可以在程序编译时进行,即静态类型检查;也可以在程序运行时进行,即动态类型检查。TypeScript支持静态类型检查,JavaScript支持动态类型检查。 为了满足不同用户的需求,TypeScript......
  • 【TypeScript学习】—编译选项(三)
    【TypeScript学习】—编译选项(三)一、自动编译文件tscxxx.ts-w二、自动编译整个项目三、编译器选项......
  • 【TypeScript】一直提示 :无法重新声明块范围变量
    【TypeScript】一直提示:无法重新声明块范围变量问题描述:在VSCode中编写ts代码时,编写保存完之后,通过tsc文件名.ts编译就会看到变量名下面出现了红色的波浪线,提示的内容是无法重新声明块范围变量。解决方法:在终端只需要使用tsc--init生成tsconfig.json文件就可以解决了。或者在当......
  • TypeScript入门到精通——TypeScript语言基础
    TypeScript语言基础 TypeScript是JavaScript的超集。更确切的说,TypeScript是ECMAScript2015(ES6)的超集。 TypeScript语言支持ECMAScript2015规范中定义的所有特性,例如类和模块等。JavaScript程序本身就是合法的TypeScript程序。JavaScript语言中的所有语法均......
  • TypeScript入门到精通——安装 TypeScript
    安装TypeScript一、安装TypeScript安装TypeScript语言最简单的方式是使用npm工具。如果你的计算机中还没有安装Node.js,则需要到Node.js的官网(https://nodejs.org/zh-cn/download)上下载LTS版本的安装包并安装(Windows:https://nodejs.org/dist/v18.18.0/node-v18.18.0-......
  • TypeScript入门到精通——什么是 TypeScript ?
    什么是TypeScript?https://en.wikipedia.org/wiki/TypeScript一、介绍TypeScript TypeScriptisafreeandopen-sourcehigh-levelprogramminglanguagedevelopedbyMicrosoft thataddsstatictypingwithoptionaltype annotationstoJavaScript.Itisdesig......
  • typescript: vscode 配置环境
    可以在Node.jscommandprompt下,转到项目文件,进行命令行配置  https://code.visualstudio.com/docs/typescript/typescript-tutorialnpminstall-gtypescriptnpminit-ytsc--versionnpminstalleslint--save-devnpminstalltypescripttypescript-eslint-pars......
  • [转] 记sublime配置typescript开发环境(插件和编译)的二三事
    最近这几天在了解typescript,typescript官网上说VisualStudio2017和VisualStudio2015Update3默认包含了TypeScript,网上也有很多前辈推荐vscode。但是自己习惯上用sublime,本着编辑器能不换就不换的原则(懒人原则),还是坚持用着sublime。可是体验太糟糕了:a.编辑器右下方没有type......