できない.dev

ESLint で eslint-plugin が読み込めないエラーが解消できない

`Cannot find module 'eslint-plugin-xxx'` の原因は、依存インストール漏れ・パッケージ名の綴り違い・flat config と従来形式の混在のいずれか。
flat config では import してオブジェクトとして渡す。

#eslint#plugin#flat-config#install#eresolve

公開:

要約

Cannot find module 'eslint-plugin-xxx'」が出るときは 依存インストール・命名・flat config 記法 の 3 点でほぼ片付く。
ESLint v9 以降は flat config が既定で、文字列指定をやめてオブジェクトを直接 import する形に変わったことに注意する。

よくある原因

  1. インストール漏れ: package.json に書いてあっても npm install が走っていない、または別ワークスペースに入っている
  2. タイプミス: eslint-plugin-importeslint-plugins-import と書く、スコープ付き(@typescript-eslint/eslint-plugin)の書き間違い
  3. flat config 記法違い: 旧 .eslintrc.json"plugins": ["foo"] を新 eslint.config.js にそのまま持ち込む
  4. monorepo: pnpm の strict hoist や Yarn workspace の resolve 設定でルートから見えない
  5. バージョン不一致: ESLint v9 と非対応プラグインの組み合わせ

解決策

1. インストールを確認する

npm install -D eslint-plugin-import
npm ls eslint-plugin-import   # 実際に解決されているか確認

npm ls(empty) を返す場合、別ワークスペースに入っているか、node_modules 破損の可能性が高い。

2. flat config で書き直す

公式のプラグイン設定ドキュメント のとおり、import してオブジェクトとして登録する。

import importPlugin from "eslint-plugin-import";
 
export default [
  {
    plugins: {
      import: importPlugin,
    },
    rules: {
      "import/no-unresolved": "error",
    },
  },
];

旧形式 (.eslintrc.json) からの移行は 公式の設定ファイル解説 を参照する。

3. monorepo 構成での確認

pnpm why eslint-plugin-import

hoist や workspace 設定で resolve できないなら、ルートにも明示的に dev dep として追加すると解決することが多い。

この記事は役立ちましたか?