Hatena::Groupsubtech

hakobenikki#

 | 

2011-04-20

node.jsモジュールロードのルール 23:52

node.jsモジュールロードのルールを知らないと、ちゃんとロードされてないのかモジュール自体がおかしいのかわからない!ので、調べてたら modules - Node.js Manual & Documentation にちゃんと書いてありました。基本的にはこれよんだ方がいいです。

一応このへんがわかってたらだいたいなんとかなるなーと思った部分をまとめときます。

var m = require('module');

としたとき、requireに渡した文字列によって以下のように処理される。

  • ./ か ../ か / ではじまるとそのファイルを探してロードする
  • そうでない文字列ならその文字列でcoreモジュールをさがす
  • coreモジュールでもなければ node_modulesを見つけて、その直下にないか探す

node_modules に関しては 本家ドキュメントから引用すると、'/home/ry/projects/foo.js' ファイル内でrequire('bar.js')すると

/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js

を順番にロードしようとする。拡張子はつけなくても、勝手に.js/.nodeをつけてロードを試みてくれる。


加えて、node.jsには、ディレクトリモジュールとして扱う機能がある。ディレクトリの直下に、以下のファイルがあるとディレクトリモジュールとしてロードできる。

  • package.json
  • index.js
  • index.node

package.jsonには、ロードすべきjsが書いてある。

// package.json
{ "name" : "some-library",
  "main" : "./lib/some-library.js" }

だいたいのライブラリはこの形になってるので、なんかおかしかったらディレクトリの中身を確認する必要がある。

おまけ

ちょっと関係ないですが、coffee scriptだとカレントディレクトリのnode_modulesを見てくれない(coffeeコマンドの場所が基点になってるから?)のでNODE_PATH環境を設定するとよいです。

typo?typo?2011/04/25 23:47node_moddules

hakobe932hakobe9322011/04/26 01:07お!ども!

EarnhardtEarnhardt2011/05/20 02:13IJWTS wow! Why can't I think of tihngs like that?

hcpqlzhcpqlz2011/05/20 22:44DiYPYU <a href="http://speqnvslsrmv.com/">speqnvslsrmv</a>

bzwexjdtvurbzwexjdtvur2011/05/23 01:03ajCFrD , [url=http://chlqrgxrlvbh.com/]chlqrgxrlvbh[/url], [link=http://wwsatzmmywua.com/]wwsatzmmywua[/link], http://ckodlgzavete.com/

ejmbfqixnejmbfqixn2011/05/31 00:09WmBxBW , [url=http://tzswuzukodgh.com/]tzswuzukodgh[/url], [link=http://bbonhlciaoup.com/]bbonhlciaoup[/link], http://jihetwbxyavo.com/

SlavaSlava2013/06/13 13:37This is both street smart and intelilegnt.

xrzeyimocdxrzeyimocd2013/06/15 13:31GLQjX4 <a href="http://qhzwlpaoocgv.com/">qhzwlpaoocgv</a>

mklbyhcwmklbyhcw2013/06/15 19:321zVqGF , [url=http://hywxnryptzvj.com/]hywxnryptzvj[/url], [link=http://btfmvdeoijfn.com/]btfmvdeoijfn[/link], http://pohxfwsherey.com/

kxsjxrrqkxsjxrrq2013/06/16 03:289X5qxu <a href="http://cvynkofslhcx.com/">cvynkofslhcx</a>

 |