事象
環境は以下の通り。
- Win10
- VirtualBoxでLaravelのHomesteadを構築
Laravelで開発環境作成中に、npm install
が必要となったので実施したところ、Maximum call stack size exceeded
が発生した。
なお、Laravelのドキュメントによると、Windowsでは(Windowsをホストとした仮想環境上でも)次のコマンドでインストールするとのこと。
npm install --no-bin-links
ログを見ると次のような内容。
12920 verbose stack RangeError: Maximum call stack size exceeded
12920 verbose stack at RegExp.test (<anonymous>)
12920 verbose stack at isDepOptional (/usr/lib/node_modules/npm/lib/install/deps.js:398:27)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:414:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
12920 verbose stack at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:430:9)
対処
.npmrcの削除
~/.npmrc
を削除すると解消される。
https://github.com/angular/angular-cli/issues/12231
→そもそも~/.npmrc
が存在しなかった。
npm installをホスト側(Windows上)で行う
Windows上で以下のコマンドを実行。(Win版node.jsはインストールされている前提)
npm install --no-bin-links
npm rebuild --no-bin-links
何故両方必要なのかはわかっていないが、情報ソースのまま行ってみている。
この後、ゲスト側(Homestead上)で必要なnpmのコマンドを認識できるようになった。
後からわかったこと
これで一旦node_moduleが入ったからと、ゲストOS(Linux側)でnpmを実行すると失敗する。
結局、npm系操作は全てホスト側(windows側)で実行しなければならない。
所感
コーディングや環境の話はHomestead上で完結すると思っていたのに、npm関係はWindows上で行わなければならないのはかなりの衝撃。
多分Windowsのファイルシステムが独特なのだろうなと思うのだが、これは結構嫌な感じ。
いちいちLaravelのコマンドはHomestead、npmの更新はWindowsというのはセンス悪い。。