フロントエンドのlinterやformatter周りの設定をまとめておく
ESLint
Frontend
Prettier
はじめに
毎回毎回プロジェクトの初期設定で「どうすればいいんだっけ?」ってなるのでここにまとめておきます。
ESLint
ESLintにやってほしいことは以下になります。
- なんか使ってない変数とかimportがあったら警告出してほしい
- import文をいい感じに並び替えてほしい
- TypeScriptでもしっかりと警告を出してほしい
- React周りの警告もしっかりと出してほしい
- いい感じにPrettierと連携してほしい
かなりざっくりとしていますが、個人的に求めているのはこの辺になります。
インストール
$ yarn add -D eslint eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-simple-import-sort # TypeScript $ yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser typescript # Prettier $ yarn add -D eslint eslint-config-prettier prettier eslint-plugin-prettier
設定
.eslintrc.jsに以下の設定を書き込む。
module.exports = { root: true, parser: '@typescript-eslint/parser', parserOptions: { ecmaFeatures: { jsx: true, }, }, env: { browser: true, node: true, }, extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react/recommended', 'plugin:jsx-a11y/recommended', 'plugin:prettier/recommended', ], plugins: ['@typescript-eslint', 'import', 'simple-import-sort'], rules: { 'simple-import-sort/imports': 'error', 'simple-import-sort/exports': 'error', 'import/first': 'error', 'import/newline-after-import': 'error', 'import/no-duplicates': 'error', 'react/prop-types': 'off', 'react/react-in-jsx-scope': 'off', 'react/no-unescaped-entities': 'off', 'jsx-a11y/anchor-is-valid': 'off', 'jsx-a11y/label-has-associated-control': [ 'error', { labelComponents: [], labelAttributes: [], controlComponents: [], assert: 'either', depth: 25, }, ], '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/ban-ts-ignore': 'off', '@typescript-eslint/no-empty-function': 'off', '@typescript-eslint/no-unused-vars': 'error', }, settings: { 'import/resolver': { node: { extensions: ['.ts', '.tsx'], }, }, react: { version: 'detect', }, }, };
Prettier
プリキュアと名前が似ているやつ。
インストールはESLintのインストールの中でやったので特に必要ない。
設定
.prettierrc.jsに以下を書き込む。
module.exports = { singleQuote: true, printWidth: 80, tabWidth: 2, semi: true, };
この辺は好みが分かれるところですね。
最後に
本当はBabelやTypeScriptの設定も書こうと思ったが適当にお気持ちで書いたことしか無いので...