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

自作Web Components公開までの道

今月のHTML5のイベントで喋る題材としてPolymerとWeb Componentsについてお話をしようかと思っているので、お遊びで作ってみました。 left-swipe-actionというiOSのリストで左へスワイプすると後ろにActionボタンが現れるあれみたいなやつです。 画面イメージ1 画面イメージ2 Demoページ http://tejitak.github.io/left-swipe-action/demo.html (注:Polymerがサポートしていないブラウザでは見れないため、Android標準のブラウザ等では見れないです) 以下、初めてWeb Componentsを作ってみるところから、bowerやgalleryサイトへの登録までの流れをざっと紹介します。

JS

Lightweight JavaScript Database on nodejsのNeDBをさわってみた

MongoDBのインターフェースを持ったNode用の簡易版DBであるNeDB(Node embedded DB)というものがあるのですが、それをいじってて少しはまったのでメモ。 例えば以下のようなJSONのデータを想定してみましょう。

JS

node.js+expressのtemplates engineにunderscore templatesを使用する

nodejsとexpressを使用した時にデフォルトでテンプレートエンジンがjadeやejsになっていると思いますが、jadeなどはhtmlとかけ離れた書き方であるため新しくtemplate engine自体の学習が必要になります。 そこで単純にresponseに.htmlを使用したいケースがあると思いますので、htmlとしてviewを書き出し、必要な変数をテンプレートに埋め込むhtmlベースの簡易テンプレートとしてunderscore templatesを使った方法を紹介します。