たごもりすメモ

コードとかその他の話とか。

npmモジュールを手元で修正するための読み込み順序メモ

npmで配られてるライブラリとかどうせ発展途上でばぐばぐだからガンガン直すんですけど git clone とかしてきたやつを以下のようにしようとしても、思ったように require されてくれない。

cd HOGE
NODE_PATH=lib node
var hoge = require('hoge');

以前 npm install hoge してあったらそっちが読まれてしまう。

そのあたりの機構はこのページをじっくり読むとだいたいわかる。ページ中に書いてある疑似コードがわかりやすい。
modules - Node.js v0.4.12 Manual & Documentation

NODE_PATH=lib した上でrequire時に ./ とかつければいい感じに読んでくれるんだけど、npmで配られるライブラリのテストやコード例にそういうものを混入させるのもよろしくない。とはいえ自分の手元で修正するときに require('./hoge') としておいてcommit時には require('hoge') に戻すとか絶対不可能だし漏れる。
ので、こうしましょう。

cd HOGE
ln -s lib node_modules

こうしておけば require('hoge') だけで lib/hoge を、しかもnpm経由で入れたモジュールよりも高い優先度で読んでくれるようになる。これで気軽にgitにあるnpmモジュールをcloneして動かしてパッチ書いてテストしてcommitしてpushしてpullreq出せるね!

node_modules をaddしないように気をつけましょう。