概要
どうせ後で入れることになるし、先にlinter+CI環境作っちゃおうぜ!という記事
多少面倒でも、秩序が保たれるので絶対やったほうが良い設定だと思っています。
手順
with-typescriptでnextプロジェクトを作る
$ npx create-next-app --example with-typescript sandbox-create-next-app-ts
lintを導入する
$ npm i -D eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react
プロジェクトルートに設定ファイルを作る。
.eslintrc.js
module.exports = {
extends: [
'eslint:recommended',
'airbnb',
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
'prettier/@typescript-eslint',
],
plugins: ['@typescript-eslint'],
parser: '@typescript-eslint/parser',
settings: {
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'],
},
},
},
rules: {
'react/jsx-filename-extension': [
2,
{ extensions: ['.js', '.jsx', '.ts', '.tsx'] },
],
},
};
prettierを導入する
$ npm i -D prettier eslint-plugin-prettier eslint-config-prettier
こちらもプロジェクトルートに設定ファイルを作る。
.prettierrc.js
module.exports = {
singleQuote: true,
}
husky + lint-stagedを導入する
$ npm i -D lint-staged husky
package.json
の末尾に設定を追加する。
以下はtscでの型チェック+ステージングされているファイルのprettier自動成形を行う設定。
好みでeslint
やjest
もワークフローに追加するといいと思います。(筆者は@typescript-eslint/recommendedを守る自信がなかった)
package.json
"husky": {
"hooks": {
"pre-commit": "tsc -p src && lint-staged"
}
},
"lint-staged": {
"*.{ts,tsx}": [
"prettier --write"
]
}
(オプション)絶対パスでimportできるようにする
相対パス地獄はつらいので、絶対パスでimport
できるようにします。
tsconfigにbaseUrl
を追記する。指定したパスが絶対パスの起点になる。
tsconfig.json
"baseUrl": ".",
このまま絶対パスインポートしようとするとeslintにimport/no-unresolved
と怒られるので、パッケージを追加する。(参考)
$ npm install -D eslint-import-resolver-typescript
eslintrcのsettingsを追加する。
eslintrc.js
settings: {
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'],
},
typescript: {}, // 追加
},
},