Конфигурация ESLint расширена за счет airbnb и prettier, для реактивного проекта с использованием машинописного текста, jest и response-hooks - PullRequest
0 голосов
/ 20 июня 2019

Я очень озадачен тем, как настроить файл конфигурации и какие конфиги / плагины мне следует использовать.

У меня есть проект React, который использует хуки Typescript, Jest и React.

Я знаю, что мне нужно установить:

  • eslint
  • prettier, eslint-config-prettier, eslint-plugin-prettier
  • eslint-plugin-import

Что касается конфигурации Airbnb, я не уверен, нужно ли мне устанавливать:

  • eslint-config-airbnb, eslint-plugin-react, eslint-plugin-jsx-a11y или
  • eslint-config-airbnb-base

Похоже, что ни один из этих типов не поддерживает Typescript, поэтому мне кажется, что мне также нужно установить:

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

А для Jest мне нужно установить:

  • eslint-plugin-jest

Я не уверен насчет React-хуков. Нужно ли устанавливать здесь что-нибудь дополнительное или один из других пакетов включает в себя его поддержку? Я вижу, что у меня есть возможность установки:

  • eslint-plugin-react-hooks

Это требуется?

Теперь для файла конфигурации есть две области, которые меня интересуют: extends и plugins.

Я вижу, что некоторые из этих пакетов могут быть расширены с помощью /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 Ответ

1 голос
/ 04 июля 2019

Думаю, я вернусь, ответь на это.Вот моя последняя конфигурация, которая работает:

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"
    }
  }
}
...