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

クロスドメインajaxのxhr2(CORS)を使ってみた感想

これまでjavascriptのXMLHttpRequest(XHR)による非同期通信のクロスドメインリクエストはブラウザの制約(same domain policy)により遮断されていました。 このsame domain policyについては以下によくまとまっていました。 http://d.hatena.ne.jp/hasegawayosuke/20130330/p1 私は遥か昔JS初心者だった頃ドメインを越えられないと知った時に衝撃を受けました。まぁもしこの制約が無かったら、やりたい放題ですからね。例えば掲示板に悪意のあるscriptを仕込んだり、ユーザーのcookieだとかなんでもサーバーに送れちゃったりしちゃう訳ですから、セキュリティ上しょうがない。 しかし、この制約を越えるために、先人のフロントエンド系の技術者達は当初ブラウザが想定指定なった様々なハックを考えだしたのです。例えば、ざっと思いつく有名なものをあげてみます。

JS

io.jsをnodebrewでinstall

昨日D社にてio.jsの勉強会に参加したので、試しに使ってみようかなーっと思ってインストールしてみました。以下nodebrewを使ってinstallした時のメモ。

JS

テンプレートライブラリJsRender使ってみた

Backboneはunderscoreというテンプレート機能を持ちます。 AngularJSやvue.jsは元々オートバインディングのテンプレート機能があります。 さて、jQueryを使った時に変数等をテンプレートにマップさせたい場合はどうしましょう?? 今回はjQueryで使えるテンプレートエンジンJsRenderを紹介します。