こんにちは、たねやつです。
Web開発、特にフロントエンドの開発をしていると、Node.jsのパッケージマネージャーであるnpmを利用する機会は非常に多いかと思います。
今回は、WSL (Windows Subsystem for Linux) 環境で npm install を実行した際に、Maximum call stack size exceeded というエラーに遭遇した場合の原因と、その対処法について記録しておきます。
この記事でできること
- WSLで
npm installが失敗する原因の一つを理解できる。 which npmを使ってnpmの実行パスを確認できるようになる。nvmを使ってNode.jsを再インストールし、問題を解決する方法を学べる。
現象と対処法
発生したエラー
特定のパッケージをインストールしようとした際に、以下のようなエラーメッセージが表示されました。
npm install hogehoge ... Maximum call stack size exceeded ...
原因の調査
このエラーは、関数呼び出しが多すぎてスタック領域を使い果たした場合に発生しますが、npm install のコンテキストでは、環境設定の不備が原因であることも少なくありません。
まず、WSL環境内でどのnpmコマンドが参照されているかを確認します。
which npm
このコマンドを実行した結果、以下のようにWindows側のパスが表示されていました。
/mnt/c/Program Files/nodejs/npm
これは、WSLがLinuxディストリビューション内のnpmではなく、Windowsにインストールされているnpmを参照してしまっていることを示しています。このパスの不整合がエラーの根本的な原因でした。
対処法
原因がWSL環境のパス設定にあるとわかったため、nvm (Node Version Manager) を使用してNode.jsをWSL内に再インストールし、パスを正しく設定し直します。
現在インストールされているバージョンを一度アンインストールし、再度インストールを実行します。
nvm uninstall latest nvm install latest
コマンド実行後、ターミナルを再起動(exitコマンドで一度抜けるか、新しいウィンドウを開く)することで、新しい設定が反映されます。
再度 which npm を実行し、/home/your_user/.nvm/... のようなWSL内のパスが表示されれば修正は完了です。この状態で npm install を実行すると、正常に完了するはずです。
最後に
今回は、WSL環境で発生した Maximum call stack size exceeded エラーの対処法について解説しました。
WindowsとLinuxが共存するWSL環境では、意図せずWindows側のツールを参照してしまい、今回のような予期せぬエラーが発生することがあります。何か問題が発生した際には、まず which コマンドで実行ファイルのパスを確認してみるのが、問題解決の近道かもしれません。