💬

Nuxt × Vite 開発環境で spawn EBADF が出たときの解決法

に公開

1. 問題

ある日いつも通り npm run dev で Nuxt プロジェクトを立ち上げたところ、突然 spawn EBADF エラー が発生し、開発サーバーが起動しなくなりました。
依存パッケージを入れ直しても状況は変わらず…。原因解明のログとして記録しておきます。

2. エラーメッセージ

 ERROR  [unhandledRejection] spawn EBADF   1:58:37 PM

    at ChildProcess.spawn (node:internal/child_process:420:11)
    at spawn (node:child_process:786:9)
    at fork (node:child_process:174:10)
    at restart (node_modules/@nuxt/cli/dist/chunks/dev.mjs:285:17)
    at startSubprocess (node_modules/@nuxt/cli/dist/chunks/dev.mjs:333:9)
    at Object.run (node_modules/@nuxt/cli/dist/chunks/dev.mjs:151:19)
    at async runCommand (node_modules/citty/dist/index.mjs:316:16)
    at async runCommand (node_modules/citty/dist/index.mjs:307:11)
    at async runMain (node_modules/citty/dist/index.mjs:445:7)

3. 環境情報

PC: MacBook Air M3
macOS: Sequia 15.6
node: v22.18.0
npm: 10.9.3
nuxt: ^4.0.3
vue: latest

4. 再現手順

  • npm run dev を実行するとエラーが即座に発生
  • node_modules や lock ファイル を削除して再インストールしても同じ

5. 試した解決策

  • パッケージの再インストール
rm -rf node_modules .nuxt .output package-lock.json dist        
npm i

→ 効果なし

  • esbuild のバージョン override
"overrides": {
  "esbuild": "0.15.15"
}

→ 状況は改善せず

6. 解決策

調査を続けたところ、Nuxt の Issue #29744 に同様の報告がありました。

結論として、macOS + Nuxt + Vite 環境で EBADF が出るのは chokidar / esbuild 周りの相性問題であり、次の対応で解決しました。

"overrides": {
  "chokidar": "3.6.0"
}

Vite 側でも package.json 内で chokidar@3.6.0 を依存として扱っている記述 が確認でき、これで開発サーバーが正常に動作するようになりました。

7. 学んだこと

最初は AI に解決策を相談しましたが、キャッシュ削除や再インストールなどの「一般的な手順」止まりで、根本原因の切り分けには届きませんでした。なので時々立ち止まって冷静にエラーログを見たり、githubで同じissuseがないか確認するのが大事だと実感しました。

8. 参考リソース

https://github.com/nuxt/nuxt/issues/29744
https://github.com/vitejs/vite/blob/86d2e8be50be535494734f9f5f5236c61626b308/packages/vite/package.json#L110

Discussion