Node.js と npm 再入門(その2:パッケージの更新)

はてなブックマーク
2018/03/29 03:16:16

前回、「Node.js と npm 再入門」の続きです。今回はパッケージの更新についてです。

パッケージの最新化

npm でインストールした各パッケージですが、インストールした後にバグフィックスや機能追加などが行われて、パッケージが更新されている可能性があります。 そこで、インストールされているパッケージを最新化する必要が出てきます。

現在インストールされているパッケージの一覧

現在インストールされているパッケージの一覧を表示するには、下記のコマンドを使用します。 全て表示すると見づらい場合は、--depth オプションで表示する階層を指定できます。

ローカルパッケージの場合

# 全ての階層を表示する場合
npm list
# 一番上の階層だけ表示する場合
npm list --depth=0

グローバルパッケージの場合

# 全ての階層を表示する場合
npm list -g
# 一番上の階層だけ表示する場合
npm list -g --depth=0

最新バージョンがあるかどうか

インストールしたパッケージに新しいバージョンが存在するかは、下記のコマンドを使用します。

ローカルパッケージの場合

npm outdated

グローバルパッケージの場合

npm outdated -g

パッケージが表示された場合は、新しいバージョンが存在するので、更新しましょう。

npm-outdated.png

パッケージを更新する

個別に1つずつ更新することもできますが、数が多くなると面倒だと思われるので、まとめて更新してしまいましょう。 まとめて更新するコマンドは下記になります。

ローカルパッケージの場合

npm update

グローバルパッケージの場合

npm update -g

npm update コマンドを実行すると、package.json と package-lock.json ファイルは自動で更新されます。

npm の自体の更新

パッケージを管理してくれる npm ですが、npm 自体にもバージョンがあり、 npm が自体が古くなっているとパッケージのインストールや更新などができなくなったりします。 そこで、npm 自体を最新化する必要が出てきます。

npm のバージョンを確認する

npm の現在のバージョンを確認するには、npm コマンドを使用します。

npm --version
5.5.1

npm のバージョンが最新かどうか

実は、初回更新前に npm outdated -g コマンドを使用しても、npm パッケージの最新バージョンはわかりません。 npm view コマンドで確認しましょう。 ちなみに2回目更新時以降は npm outdated コマンドで最新バージョンの確認ができるようになります(理由は後述)。

npm view npm version
5.8.0

npm を更新する

npm 自体の更新は、npm install コマンドを使用するとされていますが、これには少し説明が必要です。 なぜ更新するのに npm update コマンドではなく、npm install コマンドなのか。なぜ -g オプションがついているのか。

npm install -g npm

npm 自体の更新を npm が行えるということはどういうことかといえば、npm 自体もパッケージであるということです。 しかしながら、Node.js をインストールした直後には、グローバルやローカルといった場所に npm パッケージはありません。 ではどこにあるかといえば npm 自体は Node.js がインストールされた場所にあります(グローバルでもローカルでもありません)。

このコマンドは厳密にいえば、最初から入っている npm パッケージ自体を更新するコマンドではなく、グローバルに npm パッケージをインストールするコマンドなのです。 なので、このコマンドを実行すると、最初から入っていた npm パッケージと、グローバルにインストールした npm パッケージの2つ入っていることになります。 グローバルのパッケージ一覧を表示した際に npm パッケージが増えていることが確認できるでしょう。

この状態で npm コマンドを実行すると、グローバルにインストールした方の npm パッケージの方が優先的に動くため、最新化されたように見えるということです。

# 初回更新時
# 厳密にいえばこれは更新ではないが更新したように見える
npm install -g npm

そのため、実は2回目以降は、通常の npm update -g npm コマンドでも npm パッケージを更新できます。 さらに言えば、全てのパッケージを更新する npm update -g コマンドを実行すると、 npm パッケージ自身も更新されることになります。

# 2回目以降更新時は npm update コマンドでも更新できる
npm update -g npm

# 普通のグローバルパッケージを更新しているのと同じなので、npm パッケージもまとめて更新される
npm update -g

参考サイト

関連記事