NodeJSとnodejsコマンド・nodeコマンドの違い
前々からちょこちょこ気になってたことだったので調べてみた。
RubyイメージのDockerコンテナ内とかUbuntuでNodeJSを使おうと思って調べると、すぐにapt-get install nodejs
に辿り着くんですが、このコマンドでインストールされたバイナリはnodeじゃなくてnodejsになるのでいろんな所でちょっとメンドイ。例えばwebpacker実行したら/usr/bin/env: ‘node’: No such file or directory
となる。
ということで調べてみたところ、こちらもすぐに辿り着いた。
There is a naming conflict with the node package (Amateur Packet Radio Node Program), and the nodejs binary has been renamed from node to nodejs. You'll need to symlink /usr/bin/node to /usr/bin/nodejs or you could uninstall the Amateur Packet Radio Node Program to avoid that conflict.
要するに単に名前が被ってたからnode使えなかったってことみたい。iPhoneのカタカナ表記が「アイフォーン」になってるノリですね。
手元にあったUbuntu 16.04.1 LTSサーバにもRubyイメージにもnodeコマンドは入ってなかったので単純にリンクを通せば大丈夫です。
sudo ln -s `which nodejs` /usr/bin/node
備考
Dockerならrubyとnodeでコンテナ分けたら解決するし、責務も明確になるしその方がいいかも。
webpacker使うならrailsに依存するから、コンテナ分けずにmulti-stage buildした方がいいかも。