npm ERR! EPROTO: protocol error, symlink ‘../semver/bin/semver’ -> ‘hogehoge/node_modules/.bin/semver’

vagrant環境でnpm installかけたらハマりました。

事象について

npm install --save-dev cheerio-httpcli
--------------略--------------
├── @types/cheerio@0.17.31  extraneous
├── @types/node@6.0.63  extraneous
├── async@2.1.4  extraneous
├── cheerio@0.22.0  extraneous
├── constants@0.0.2  extraneous
├── foreach@2.0.5  extraneous
├── he@1.1.1  extraneous
├── iconv-lite@0.4.15  extraneous
├── jschardet@1.4.1  extraneous
├── object-assign@4.1.1  extraneous
├── os-locale@1.4.0  extraneous
├── prettyjson@1.2.1  extraneous
├── request@2.79.0  extraneous
├── require-uncached@1.0.3  extraneous
├── rsvp@3.3.3  extraneous
├── spawn-sync@1.0.15  extraneous
├── type-of@2.0.1  extraneous
└── valid-url@1.0.9  extraneous

npm WARN 02_downloadweb@1.0.0 No description
npm WARN 02_downloadweb@1.0.0 No repository field.
npm ERR! Linux 3.10.0-229.14.1.el7.x86_64
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install" "--save-dev" "cheerio-httpcli"
npm ERR! node v6.9.4
npm ERR! npm  v3.10.10
npm ERR! path ../semver/bin/semver
npm ERR! code EPROTO
npm ERR! errno -71
npm ERR! syscall symlink

npm ERR! EPROTO: protocol error, symlink '../semver/bin/semver' -> '/hogehoge/node_modules/.bin/semver'
npm ERR! 
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /hogehoge/npm-debug.log

結論

vagrantで共有を張っているフォルダに対してnpm installをかけるときは「–no-bin-links」オプションをつけましょう。

–no-bin-linksとは

名前の通り、シンボリックリンクを作成しないことを指示するコマンド

どういうことか

npm installをかけるとフックして依存パッケージに含まれるbin module packageをインストールしてpathを通そうとする。
vagrantは共有ファイルに対し、シンボリックリンクを張ることを禁止している..っぽい

意外とそこらへんの仕様の絡みがよく分かっておらず、結構苦労しました。
みなさんも気を付けましょう

参考

https://github.com/npm/npm/issues/5874
【npm】【Vagrant】Vagrantの共有フォルダ上でnpm installすると失敗する原因と、–no-bin-linksオプションをつけると成功する理由

【広告】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です