今回は、npm周りのTIPSです。特に新しい知見ではないのですが、メモのために書いておきます。
node.jsのパッケージマネージャであるnpmは依存パッケージの解決をしてくれます。依存パッケージは、package.jsonに書いておきます。
例えば、expressを使う場合、
"dependencies": {
"express": "*"
}
のように書きます。バージョン番号を指定しておきたい場合もあります。
"dependencies": {
"express": "3.1.0"
}
のように書きます。他にも不等号やチルダを使ってバージョン番号の範囲を書くこともできます。今回はそのあたりは詳しく書きませんが、package.jsonにはバージョン番号の範囲を書いておくことがおすすめです。node.js関連のパッケージはまだ発展途上で仕様が変わることがよくあるからです。そうでなくても、">=3.0.0"などと書いておけば、"3.0.0"では動いたのだということが分かってよいかもしれません。
さて、本題です。依存パッケージがnpmに登録されていない場合はどうすればよいでしょう? 一つの答えは、登録してしまえばよいのです。が、登録したくない場合もあります。今回そのようなケースがありました。それは、GitHubでforkした場合です。将来的にはPull Requestして取り込んでもらうつもりなら、npmに独自バージョンを登録するのはうまくありません。そこで、npmに登録されていないけれど、依存パッケージとして使いたいときにどうするかという話です。
GitHubを使うとしても方法は2通りあります。一つは、tarballで取得する方法、もう一つは、gitプロトコルで取得する方法です。
前者は、
"dependencies": {
"jsdom": "https://github.com/dai-shi/jsdom/tarball/3bb5b24c5e"
}
のように書き、後者は、
"dependencies": {
"jsdom": "git://github.com/dai-shi/jsdom.git#3bb5b24c5e"
}
のように書きます。
どちらがいいのでしょう? よく分かりません。 試しに一回だけ、npm installの時間を計測してみました。 結果、前者が11秒、後者が14秒でした。 gitプロトコルの方がオーバヘッドがあるのかもしれません。 httpプロキシしか使えない場合は、前者に決まりですね。 GitHubがtarballのURLを廃止したら(ZIPのURLはリンクがありますが、tarballってどこまでオフィシャルなのでしょう?)、後者に決まりですね。
今のところはどちらでもよいのかもしれません。
10/20追記。
"https://github.com/dai-shi/jsdom/tarball/3bb5b24c5e"
の代わりに、
"https://github.com/dai-shi/jsdom/archive/3bb5b24c5e.tar.gz"
と書く方法もあるようです。こっちの方がオフィシャルな感じがしますね。
コメント