tk_zawa Blog

Nest.js@v7 で VSCode + ESLint + Prettier による自動フォーマットが効かない & その対策

October 23, 2020

今回の問題

Nest.js@v7.0.0を卒制の企画で使おうとしたが、
インストール直後のままだとVSCode上でformatOnSaveが動かなかった(何故かは不明…)

しかもGithubのNest.jsのissue等を探してもどこにも先駆者がいなかった…

原因

.eslintrc の以下の設定とプラグイン不足(eslint-plugin-prettier)が原因っぽい

.eslintrc
"plugins": ["@typescript-eslint/eslint-plugin"],

対策

eslint-plugin-prettierのをインストールし、 .eslintrc を以下のように修正したら自動フォーマットが動いた

$ npm i eslint-config-prettier

ESLint周りの拡張機能は以下のようになる。

package.json
{
  ...
  "devDependencies": {
    ...
    "@typescript-eslint/eslint-plugin": "3.9.1",
    "@typescript-eslint/parser": "3.9.1",
    "eslint": "7.7.0",
    "eslint-config-prettier": "^6.10.0",
    "eslint-plugin-import": "^2.20.1",
    "eslint-plugin-prettier": "^3.1.4",
}
.eslintrc
{
  "root": true,
  "env": {
    "node": true,
    "es6": true,
    "jest": true
  },
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": "./tsconfig.json",
    "sourceType": "module"
  },
  "plugins": [
    "@typescript-eslint"
  ],
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/eslint-recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:prettier/recommended",
    "prettier/@typescript-eslint"
  ],
  "rules": {
    "@typescript-eslint/interface-name-prefix": "off",
    "@typescript-eslint/explicit-function-return-type": "off",
    "@typescript-eslint/explicit-module-boundary-types": "off",
    "@typescript-eslint/no-explicit-any": "off"
  }
}
.vscode/settings.json
{
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true,
  }
}