Node. js とモジュールのインストール【macOS】

JavaScript

Node. js とモジュールのインストール【macOS】

macOS 10.15.7 / nodebrew 1.2.0 / node v19.3.0

Node. jsのインストール

準備

Node. js インストールには nodebrawを使う。nodebrewは Homebrewによりインストールする。Homebrewはインストール済みとする。

インストール

nodebrew setupコマンドにより Node. jsをインストールする作業環境を作成する。ホームディレクトリの下に .nodebrewというディレクトリが作成し、その下にいくつかのディレクトリを作成する。nodebrewは、ここに複数の異なったバージョンの Node. jsをインストールし、コマンドにより使用するバージョンを切り替えることができる。
なおこの環境は、setupコマンドをどこで実行しようと、ホームディレクトリの下に作成される。
nodebrewコマンドは setupを実行した時点で .nodebrewディレクトリ配下にコピーされ、以後これを参照するようになっている。
nodebrewコマンドを実行できるようにパスを通す。.bash_profileに次のコードを追加する。後述するが、Node. js(nodeコマンド)もここに格納される。
nodebrewでは Node. jsのバージョンを指定してインストールすることができる。次のコマンドはインストール可能なバージョン一覧を表示する。
この時点での最新の安定版の v20.15.1を指定してインストールする。
nodebrewを利用すれば、バージョンの異なる複数の Node.jsを同時にインストールし、それらを切り替えて使用することができる。lsコマンドでインストール済みの Node.jsの全バージョン表示する。
Node.js v20.15.1 を使用する。

Node. jsの安定版

Node. jsの安定版のバージョンは Node.jsの公式サイト Download Node.js® で確認できる。LTS(Long-term Support)が安定版で、CURRENTが最新版(ただし安定性の保証なし)になる。
image1

JavaScriptの実行

引数に JavaScriptファイルを指定して nodeコマンドを実行する。 ファイルは拡張子(.js)を省略してもかまわない。

npmモジュールのインストール

Node.jsを使って実用的な機能を実現するには、機能に応じたモジュールのインストールが必要である。モジュールは npm(Node Package Manager)を使用してインストールする。Node. jsをインストールすると自動的に対応したバージョンの npmがバンドルされる。
インストールの仕方は、アプリケーション開発管理に対する考え方によっていくつかあると思う。 筆者の環境では、すべてのモジュールを一つのディレクトリの下にインストールし、全アプリケーションはそこを参照にいく という最もシンプルなな方法をとっている。ここでは、ホームディレクトリに下に 「MyNode」 というディレクトリを作り、その下にモジュールをインストールする。
管理をしっかりしたいのであれば、モジュールをいくつかのグループに分けてインストールし、アプリケーションごとに参照できるグループをコントロールするという方式が考えられる。この場合、仕組みは複雑になるであろう。

モジュールのインストール環境の作成

ディレクトリ MyNode を作成し npm init コマンドを実行する。直下に package.json という JSONファイルが作成される。
最初にモジュールをインストールすると node_modules ディレクトリと package-lock.json ファイルが作成される。node_modules にはインストールされたモジュールのパッケージがフォルダー単位に格納され、二つのJSONファイルには、npmがモジュールを管理するために、モジュールのバージョンや依存関係といった情報が記述される。
npmモジュールを利用するためには node_modules ディレクトリへの参照だけが必要である。方法としては、環境変数によりディレクトリへのパスを通す(後述)、ディレクトリへのシンボリックリンクを張る、ディレクトリを物理的にコピーのいずれかである。

モジュールのインストール

モジュール名を指定して installコマンドを実行する。具体的な例として、Webサーバを実装するためのフレームワーク expressをインストールする。expressは多数のモジュールから構成されるのでインストールの結果、50個あまりのフォルダに関連するファイルが格納される。
npm listコマンドはコマンドの実行ディレクトリにインストールされているモジュールの一覧を表示する。
モジュールのアンインストール

モジュールの検索パスの設定

環境変数 NODE_PATH に モジュールをインストールした node_modulesディレクトリを設定する。これにより、いずれの場所からでもモジュールを参照することができる。
JavaScriptソースコードからモジュールを参照するには、モジュール名を指定して require関数を実行すればよい。

検索パスの確認方法

nodeコマンド → global.module.paths により、そのディレクトから参照できるパスの一覧を確認できる。/Users/itohisao/mikomokaru/test/ で実行してみた。
これらのパスは自動的に定義されるもので、そこにモジュールがインストールされていることを保証しない。そもそも存在しないディレクトもある。
赤字のパスはホームディレクトリ(/Users/itohisao/)、カレントディレクトリ(~/mikomokaru/test)の違いによってその都度変わる。nodeコマンドの実行ディレクトリにより検索パスが変わることもあるのである。
青字のパスは、環境変数 NODE_PATHに設定した検索パスである。これがあることによって、あらゆるディレクトリから参照することができる。
パスの設定にはある法則がある。nodeコマンドの実行ディレクトリから、ルートディレクトリ(/)に遡って、すべてのディレクトリに "node_modules"を設定している。どこかにモジュールがインストールされていれば、パスの検索は成功する。逆に言えば、モジュールをインストールしたディレクトリから派生するすべてのディレクトリは、そのモジュールを参照できるということになる。

グローバルインストール

上記で説明したモジュールのインストールは、実行ディレクトリにインストール環境を作成するもので、ローカルインストールという。一方、グローバルインストールはモジュールをnpで定義したひとつの特定のディレクトリにインストールするものである。
次の例は sharpモジュール(画像ファイルのサイズの変更などできる)をグローバルインストールするものである。ローカルインストールと異なるのは gオプションの有無だけである。
インストール場所は次のコマンドでも確認できる。
検索のパスが通っていないと参照できないのは、ローカルインストールの場合と同じようである。環境変数に検索パスを追加する。
[補足] 謎の状況
/Users/itohisao/.nodebrew/node/v20.15.1/lib/node_modules の下に次のモジュールがインストールされている。
いつどうやって作成したのか覚えていないが foreverは自分でインストールしたに違いない。想像だが、必要に迫られて OSの再インストールをなったときに brewや nodebrewの再インストールも何回か行ない、そのときにインストールしたものでないかと疑っている。いろいろ試行錯誤していく中でゾンビ化したのかもしれない。
もう一つ謎の状況
.zshenv の中で "npm root -g" を展開すると、ターミナルと実行したときと異なり、なぜか上記のディレクトリになってしまう。
よって、グローバルモジュールの参照先が上記の node_modulesになってしまわないように .zshenvの記述は次のようにしている。