Akata Works

東京エンジニア。主にRuby,Go,たまにAWSとiOS。ゲーム音楽が好きです。連絡はTwitterかakata.onen@gmail.comまで

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した方がいいかも。

参考