npm と Node.js 上で require を使ったモジュール読み込みの仕組みについてメモ

phi phi on Node.js

Node.js 6連投. 第1弾!

Node.js で require でモジュールを読み込む際に引っかかった箇所があったのでメモしておきます.

インストール済の hoge(仮)というモジュールを下記のようなコードで

var hoge = require('hoge');  

読み込もうとしても

Cannot find module 'hoge'  

というエラーが出てしまい読み込むことができないことがありました. そこで, モジュールをロードする仕組みをちょっと調べてまとめてみました.

npm でインストールしたモジュールの行方

まず, npm でインストールしたモジュールの行方についてまとめます.

npm でのインストールには 2種類あります.

ローカルインストール

普通にインストールするとローカルインストールになります. 現在のカレントディレクトリの node_modules フォルダの中にインストールします.

npm install モジュール名  

どこにインストールされるのかちゃんと確認したい場合は bin コマンドを使います.

npm bin  

グローバルインストール

グローバルインストールは全てのプロジェクト共通で使いたいモジュールをインストールする際に使います. やり方は簡単でローカルインストールの方法に -g オプションを加えるだけです.

また, グローバルインストールした場合, そのディレクトリにパスが通ります. coffeescript や mocha を直接コマンドとして実行でるようになるのはそのためです.

npm install -g モジュール名  

グローバルインストール用フォルダがどこにあるのかは -g オプションをつけて bin コマンドを実行すると確認できます.

npm bin -g  

ちなみに windows の場合グローバルインストール用フォルダにパスが通っていないので, NODE_PATH 環境変数にパスを登録してから使うようにしましょう.

windows 7 の場合, C:/Users/ユーザー名/AppData/Roaming/npm/node_modules 的な場所にあるかと思います.

require でモジュールをサーチする場所

require でモジュールをサーチするディレクトリについてまとめます.

require で探すモジュールのパスは global.module.paths の中に入っています.

node  
global.module.paths  

デフォルトではカレントディレクトリから下りながら全てのディレクトリの node_modules が登録されています.

[ 'e:/Users/hoge/Documents/work/node_modules',
  'e:/Users/hoge/Documents/node_modules',
  'e:/Users/hoge/node_modules',
  'e:/Users/node_modules',
  'e:/node_modules' ]

それに加えて NODE_PATH 環境変数の中にあるモジュールを探しに行きます.

Reference

参考にしたサイト

次回は自作モジュールの作り方と作ったモジュールを npm で公開する方法について紹介しようと思います.