💬
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. 参考リソース
Discussion