JSでライブラリを作って、そのライブラリを使うプロジェクトがあった時に、使う側がpackage.jsonのdepedenciesに依存を追加して、npm installしてbrowserifyとかでrequireしたりしています。(browserifyでのmoduleの依存解決について興味のある方は”Browserify dependencies in depth!“をご参照ください)

gitのsubmoduleなんか使うよりはnpm installだけで済むので快適なのですが、絶賛開発中にライブラリ側を更新する度に、使っている側のプロジェクトのnode_modules以下の該当ディレクトリを削除してnpm installし直したりするのは面倒ですよねー

そこでnpm linkを使うと良い感じになりますたのでメモ。意外と記事が少なかったのでまとめておきます。


npm link使い方

1. ライブラリのディレクトリで”npm link”を実行
実行するとモジュールのsymbolic link(紐付け)が完了します。今回の例では自作のライブラリをyour_common_moduleとしています

your_common_module xxx$ npm link
/Users/xxx/.nodebrew/node/v0.11.12/lib/node_modules/your_common_module -> /Users/xxx/your_common_module

2. 使う側のプロジェクトで”npm link your_common_module”を実行
使う側のプロジェクト直下で下記コマンドを実行。linkを辿る様子が出力されます。

your_project xxx$ npm link your_common_module
/Users/xxx/your_project/node_modules/your_common_module -> /Users/xxx/.nodebrew/node/v0.11.12/lib/node_modules/your_common_module -> /Users/xxx/your_common_module

これで紐付け完了!これまで使う側がbrowserifyなどで node_modules/your_common_module 以下を見に行っていたところが、1で登録したライブラリ自身のディレクトリを見に行くようになります。
(ちなみに、この例ではnodeのv0.11.12を使っていますが、iojsの古いバージョンではerrorで動かなかった…)


linkの確認

使う側が紐付けを行っているか確認するためには”npm ls your_common_module”で確認できます。

your_project xxx$ npm ls your_common_module
└── your_common_module@0.0.1 -> /Users/xxx/your_common_module

linkの削除

linkを消すためには、npm unlinkを使います。

your_project xxx$ npm unlink your_common_module
unbuild your_common_module@0.0.1

めでたしめでたし。もうnpm installを繰り返す必要はありませんね!


Categories: JS

Related Posts

JS

NodeでWordPress APIを使って投稿してみる

WordPressのNodeJS用モジュールを使ってみたのでメモ。

JS

vue.jsのv-animationとv-effectを使ってみる

vue.jsでv-animationだけで機能が実現できない場合に、javascriptでカスタマイズしたエフェクトを付けられるv-effectを試しに使ってみたメモ。

JS

Array.prototype.reduce使ってみた

ES5から導入されているArray.prototype.reduceを使ってみたら便利だったので紹介。