【windows + vagrant】npm で errno -26

忙しい人向け

npm i -D --no-bin-links --no-optional

環境

問題

vagrant上でnodeパッケージを使用すべくnpm install したらエラー。

エラー1 errno -71

 npm i -D webpack
 ...
 npm ERR! code EPROTO
 npm ERR! errno -71
 npm ERR! syscall symlink
 ...

シンボリックリンクが使用できないよ!ってことみたいです。
windows + vagrant でよく発生する問題のようです。

対処

--no-bin-links

オプションによってシンボリックの作成を回避します。

エラー2 errno -26

本題。

npm i -D --no-bin-links webpack
 ...
 npm ERR! code ETXTBSY
 npm ERR! errno -26
 npm ERR! syscall rmdir
 npm ERR! ETXTBSY: text file is busy, rmdir '/vagrant/moge/node_modules/fsevents/build/Release/.deps/Users/eshanker/Code/fsevents/lib'
 ...

操作中のファイルがあるよってことらしいんですけど、そもそもそんなディレクトリがない。rmdir しても変わりなし。

対処

--no-optional

今回の場合、どうも fsevents が悪さしているらしいです。
fsevents は Mac でしか使用できないライブラリで、これをインストールしようとしてコケている模様。

環境によって依存するライブラリ(optionalDependencies)のインストールを回避するため、この引数を指定しています。

備考

err -26 については -g でグローバルインストールするときには出てこなかったりでよく分かっていない部分が多いです。
npm側としてはcentosインストールしたつもりだったのになんでwindowsと共有しとんのや!って感じなのでしょうか・・・

今のところ問題なく動いているので、ひとまずこれでおわり。

まとめ

npm i -D --no-bin-links --no-optional


# 参考
sqlazure.jp
qiita.com
qiita.com
qiita.com
docs.npmjs.com