2020年くらいに作ったNuxtプロジェクトでESLintとprettierを設定したが、時間が経ったので改めて環境を設定し直してみた。
ESLintは環境変化が激しく、まとまった情報があまりなかったので備忘として残しておく。
環境
# node --version
v16.16.0
# yarn --version
1.22.15
手順
ESLintとprettierを追加。
yarn add -D prettier
yarn add -D eslint
.eslintrcを作成。
対話で聞いてくれるので答えていく。
yarn create @eslint/config # eslintの設定ファイルを作成
How would you like to use ESLint? …
To check syntax only
❯ To check syntax and find problems
To check syntax, find problems, and enforce code style
? What type of modules does your project use? …
❯ JavaScript modules (import/export)
CommonJS (require/exports)
None of these
? Which framework does your project use? …
React
❯ Vue.js
None of these
? Does your project use TypeScript? › No / Yes # Yesを選択
? Where does your code run? … (Press <space> to select, <a> to toggle all, <i> to invert selection)
✔ Browser
✔ Node
? What format do you want your config file to be in? …
JavaScript
YAML
❯ JSON
eslint-plugin-vue@latest @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest
? Would you like to install them now? › No / Yes # Yesを選択
? Which package manager do you want to use? …
npm
❯ yarn
pnpm
プラグインの追加。
yarn add -D @nuxtjs/eslint-config-typescript # vueファイルをリント対象にする
yarn add -D eslint-config-prettier # Prettierとの競合ルールをオフにする
yarn add -D eslint-plugin-nuxt # Nuxt用のesLint設定を追加
出来上がったpackage.jsonのdependenciesがこちら。
(ESLintとprettier以外は省略)
"devDependencies": {
"@nuxtjs/eslint-config-typescript": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^5.33.1",
"@typescript-eslint/parser": "^5.33.1",
"eslint": "^8.22.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-nuxt": "^3.2.0",
"eslint-plugin-vue": "^9.3.0",
"prettier": "^2.7.1",
}
.eslintrcがこちら。
extendsの記述は後ろにあるものが優先、上書きされるので、
eslint一般設定 < vue < nuxt < prettier
となるように記述。
prettierは最後。
https://github.com/prettier/eslint-config-prettier
{
"root": true,
"env": {
"browser": true,
"node": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:vue/vue3-essential",
"plugin:@typescript-eslint/recommended",
"@nuxtjs/eslint-config-typescript",
"plugin:nuxt/recommended",
"prettier"
],
"overrides": [],
"parserOptions": {
"parser": "@typescript-eslint/parser",
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": ["vue", "@typescript-eslint"],
"rules": {}
}
prettierの設定。
{
"semi": false,
"arrowParens": "always",
"singleQuote": false,
"trailingComma": "es5",
"printWidth": 100,
"tabWidth": 2
}
採用しなかったもの
eslint-webpack-plugin(旧eslint-loader)
eslint-loaderは現在非推奨となっており、代わりにeslint-webpack-pluginを使う。
https://github.com/webpack-contrib/eslint-loader
eslint-loaderは以前採用していたが、Github ActionsのCI TestでPR作成時にeslintを走らせてるし、VSCode等のIDEでも常に警告を表示してくれるので、eslint-webpack-pluginも今回を機に採用をやめてみた。
eslint-plugin-prettier
prettierをリンタールールのように実行できるプラグイン。
自分自身ESLintとprettierの境目をあまり分かっていなかったので、その辺分かりやすくするため導入見送り。
(公式でも現在非推奨)
https://prettier.io/docs/en/comparison.html
https://prettier.io/docs/en/integrating-with-linters.html#notes