npm と Node.js 上で require を使ったモジュール読み込みの仕組みについてメモ
Node.js 6連投. 第1弾!
- npm と Node.js 上で require を使ったモジュール読み込みの仕組みについてメモ <- いまここ
- Node.js 用に作った自作モジュール『merger』を npm で公開してみた
- Node.js 用の自作モジュールの作り方メモ
- Node.js 用に作った自作モジュールを npm に登録して公開する方法
- JavaScript テストフレームワーク『Mocha』の使い方メモ
- JavaScript テストフレームワーク『Mocha』をブラウザ上で使う方法
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 についてまとめてみる - need more something else...
- Node.js のライブラリ読み込みについてのTIPS - waりとnaはてな日記
- npm installの-gオプションとnode-inspectorについて | tkd55 blog
次回は自作モジュールの作り方と作ったモジュールを npm で公開する方法について紹介しようと思います.
