端くれプログラマの備忘録 Node.js [Node.js] Vagrant環境で”Maximum call stack size exceeded”エラー

[Node.js] Vagrant環境で”Maximum call stack size exceeded”エラー

症状

$ npm install --save-dev babel-cli
npm WARN rollback Rolling back ansi-regex@2.1.1 failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/node/test/node_modules/ansi-regex/package.json.2739204596'
npm WARN rollback Rolling back ansi-styles@2.2.1 failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/node/test/node_modules/ansi-styles/package.json.2739791237'
npm WARN rollback Rolling back arr-diff@2.0.0 failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/node/test/node_modules/arr-diff/package.json.2336313770'
...
npm WARN test@1.0.0 No description
npm WARN test@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: arr-flatten@1.1.0 (node_modules/arr-flatten):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: ETXTBSY: text file is busy, rename '/home/vagrant/code/node/test/node_modules/arr-flatten/package.json.285927042' -> '/home/vagrant/code/node/test/node_modules/arr-flatten/package.json'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: arr-diff@2.0.0 (node_modules/arr-diff):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: ETXTBSY: text file is busy, rename '/home/vagrant/code/node/test/node_modules/arr-diff/package.json.2336313770' -> '/home/vagrant/code/node/test/node_modules/arr-diff/package.json'
...
npm ERR! Maximum call stack size exceeded
npm ERR! A complete log of this run can be found in:
npm ERR! /home/vagrant/.npm/_logs/2018-06-09T05_33_05_986Z-debug.log

原因

Vagrantの共有ディレクトリで実行した場合に発生する。ゲストOSのローカルディレクトリだと発生しない。これから推測するに、共有ディレクトリが引き継いでいるホストOSのファイルシステムの特性が悪さしているのではないかと思われる。シンボリックリンクの可否とかパスの長さ制限とか?

対策

Vagrantの共有ディレクトリじゃないローカルディレクトリで実行する。

参考サイト

npm ERR! code ETXTBSY · Issue #9979 · npm/npm · GitHub
https://github.com/npm/npm/issues/9979#issuecomment-149308728