Gatsby.jsで"EMFILE: too many open files"というエラーが出たときの対処法(Vercel)


シチュエーション

Gatsby.jsで大量の画像ノードを作成したところ、あるとき突然以下のようなエラーが出ました。

このエラーはローカルで開発しているMac上では再現せず、Vercelでデプロイした場合のみ発生しました。

解決方法

gatsby-node.jsの一番上に、以下を追加し、再度デプロイします。

const realFs = require('fs')
const gracefulFs = require('graceful-fs')
gracefulFs.gracefulify(realFs)

このエラーはデフォルトのfsを使用していると起こる一般的なエラーらしく、その対策として存在するgraceful-fsを使用するようにgatsby-source-filesystemに伝えている感じなのかな、と思います。

本当の解決方法

上記の解決方法は、一時的に問題を解決しましたが、再発しました。
なので、Netlifyに変更したところ、問題が解決しました。
Vercelの方がビルドもCDNもはやいので残念ですが、GatsbyとVercelは相性が悪いのかもしれません。

参考

この対処法は以下のissueに乗っていました。
https://github.com/gatsbyjs/gatsby/issues/12011