ここら辺の用語が今だに混乱するのでこの機会にまとめておきます。
node.js
昔node.jsでExpressを使ってシステムを組んだりした関係でJavaScriptをサーバサイドで使えるようにするもの、ぐらいの理解だったので、なぜフロントエンドでnode.jsが必要なのかわからなかった。
以下の方の説明がわかりやすかった。
https://qiita.com/kobalab/items/e0c2a3d5a9f4c172bad0
Node.jsとは、Google Chromeに搭載されている高速なJavaScriptエンジンV8をコマンドラインから使えるようにしたJavaScript言語処理系
要はjavaコマンドやperlコマンドと同じです。node hoge.js で hoge.js に書かれたJavaScriptのプログラムを実行します。node とだけタイプすると対話モードに入るので、インタフェースはshに近いといえるかもしれません。
つまり本来はブラウザでの動作に特化したJavascriptをJavaScriptエンジンV8を使ってUnix系で使うときに必要なもの。上記のインタープリター機能やnpmも含まれている。
なぜフロントエンド開発でもnode.jsが必要なのか調べたところ、
大量のフロントエンド向けjavaScriptのモジュールが下記のnpm向けに開発されていて、それを利用するためにnode.jsが必要だから、ということらしい
npmとは
node.jsのモジュール、パッケージ管理ツール。
パッケージ管理システムでNode Package Managerの意。
Node.jsをインストールすると一緒にくっついてくる。
Ruby的に言えば、npmはBundler、パッケージはGem、package.jsonはGemfileのようなもの?
例えばwebpackなどを管理する。
webpackとは
機能や関数単位ごとに別れたJavaScriptモジュールを一つのファイルに統合(バンドル)してくれるツールモジュールバンドラーと呼ばれています。
また、JavaScriptだけでなく、CSSや画像などのバンドルも可能。
nodenvとは
node.jsのバージョン管理ツール
anyenv
node.jsのnodenvやrubyのrbenvなどのバージョン管理ツールをまとめて管理してくれるツール。