ESLint配置扩展了airbnb和prettier,用于使用打字稿,笑话和react-hooks的react项目

时间:2019-06-20 02:33:10

标签: eslint prettier eslint-config-airbnb eslintrc

我对如何设置配置文件以及应该使用哪些配置/插件感到非常困惑。

我有一个使用Typescript,Jest和React钩子的React项目。

我知道我需要安装:

  • eslint
  • prettiereslint-config-prettiereslint-plugin-prettier
  • eslint-plugin-import

对于Airbnb配置,我不确定是否需要安装:

  • eslint-config-airbnbeslint-plugin-reacteslint-plugin-jsx-a11y
  • eslint-config-airbnb-base

似乎都不支持这些Typescript,所以看来我也需要安装:

  • @typescript-eslint/eslint-plugin@typescript-eslint/parser

对于Jest,我需要安装:

  • eslint-plugin-jest

我不确定React挂钩。我是否需要在此处安装其他任何东西,或者其他软件包中是否包含对此的支持?我看到我可以选择安装:

  • eslint-plugin-react-hooks

那是必需的吗?

现在,对于配置文件,我关注两个方面:extendsplugins

我看到可以使用/recommended扩展其中一些软件包。我应该使用其中任何一个吗? extends部分应该是什么?我看过将其设置为的示例:

{
  "extends": ["airbnb-base", "plugin:prettier/recommended"]
}

虽然我看到了其他使用示例:

{
  "extends": ["airbnb", "prettier"]
}

另一个使用以下示例:

{
  "extends": [
    "airbnb",
    "plugin:prettier/recommended",
    "prettier/react"
  ]
}

其他Typescript,Jest和React Hooks插件又如何呢?例如,eslint-plugin-jest建议在扩展中添加"plugin:jest/recommended"。那会与其他任何冲突吗?我看到我也可以添加"plugin:@typescript-eslint/recommended""prettier/@typescript-eslint"。是否也应该将它们包括在内?

对于plugins部分,我是否只列出了我安装的每个eslint-plugin-....软件包?

这是一个例子,请让我知道它的外观:

已安装的软件包

@typescript-eslint/eslint-plugin
@typescript-eslint/parser
eslint
eslint-config-airbnb
eslint-config-prettier
eslint-plugin-import
eslint-plugin-jest
eslint-plugin-jsx-a11y
eslint-plugin-prettier
eslint-plugin-react
eslint-plugin-react-hooks
prettier

配置文件:

{
  "extends": [
    "airbnb",
    "plugin:@typescript-eslint/recommended",
    "plugin:jest/recommended",
    "plugin:prettier/recommended",
    "plugin:react/recommended",
    "prettier",
    "prettier/@typescript-eslint"
  ],
  "parser": "@typescript-eslint/parser",
  "plugins": [
    "@typescript-eslint", 
    "import",
    "jest", 
    "jsx-a11y", 
    "react", 
    "react-hooks"
  ],
}

1 个答案:

答案 0 :(得分:1)

以为我会回来回答这个问题。这是我可以使用的最终配置:

module.exports = {
  "env": {
    "browser": true,
    "es6": true,
    "jest": true,
    "node": true
  },
  "extends": [
    "airbnb",
    "plugin:@typescript-eslint/recommended",
    "plugin:import/typescript",
    "plugin:jest/recommended",
    "plugin:react/recommended",
    "plugin:prettier/recommended",
    "prettier",
    "prettier/@typescript-eslint",
    "prettier/react"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": 2018,
    "jsx": true,
    "sourceType": "module",
    "useJSXTextNode": true
  },
  "plugins": ["@typescript-eslint", "import", "jest", "react", "prettier"],
  "rules": {
    "@typescript-eslint/explicit-function-return-type": [
      "error",
      {
        "allowExpressions": true,
        "allowTypedFunctionExpressions": true
      }
    ],
    "@typescript-eslint/explicit-member-accessibility": "off",    
    "import/no-extraneous-dependencies": 0,
    "react/jsx-filename-extension": ["error", { extensions: [".jsx", ".tsx"] }],
    "react/prop-types": [0]
  },
  "settings": {
    "react": {
      "version": "detect"
    }
  }
}