npm v2のインストールは`npm i -g npm@latest-2`

タイトルで言い切った感のある小ネタ。

最新のnpm v3は基本素晴らしいのだけど、主にnode_modulesがフラットになったなどのbreaking changesによって一部のパッケージがまだ非対応だったり、自分のプロジェクトで固めたshrinkwrap.jsonからは対応前の古いパッケージを参照していたりすることが稀によくある。

そういうケースではnpm v2系を使い続けたいのだけど、インストール時に

$ npm i -g npm@2

でインストールするとv2系の正式リリース版ではなく、プレリリース版が入ってしまう。

npmプロジェクトではリリースをdist-tagsで管理していて、まずRC版をnextタグとしてプレリリースをして、問題なければ次のリリースでlatestとして正式リリースするプロセスになっている。 v3系がリリースされたので上記のタグはv3系が使ってしまっているが、v2系にもちゃんとタグが付いている。こんな感じ。

  'dist-tags': 
   { latest: '3.5.0',
     next: '3.5.1',
     'latest-2': '2.14.12',
     'v3.x-latest': '3.5.0',
     '3.x-latest': '3.5.0',
     '3.x-next': '3.5.1',
     'v3.x-next': '3.5.1',
     'next-2': '2.14.13',
     'latest-1': '1.4.29' },

npm@2だとnext-2相当がインストールされちゃうので、無駄なリスクを減らしたいプロジェクトではlatest-2をインストールしておくとたぶん無難。

$ npm i -g npm@latest-2

とはいえ、いまさらv2系に大きな変更は入らないと思うのでどっちでもあんまり影響はないと思うけど。

関係ないけど、v3系のdist-tagsはちょっと命名規則が違うんですね。v3.x3.xの両方用意されてたり謎にやさしいし。