Node.js と npm の使い方(その2:パッケージの更新)
前回、「Node.js と npm の使い方(その1:概要)」の続きです。今回はパッケージの更新についてです。
パッケージの最新化
npm でインストールした各パッケージですが、インストールした後にバグフィックスや機能追加などが行われて、パッケージが更新されている可能性があります。 そこで、インストールされているパッケージを最新化する必要が出てきます。
現在インストールされているパッケージの一覧
現在インストールされているパッケージの一覧を表示するには、npm list
コマンドを使用します。
全て表示すると見づらい場合は、--depth
オプションで表示する階層を指定できます。
ローカルパッケージの場合
# 全ての階層を表示する場合 npm list
# 一番上の階層だけ表示する場合 npm list --depth=0
グローバルパッケージの場合
# 全ての階層を表示する場合 npm list -g
# 一番上の階層だけ表示する場合 npm list -g --depth=0
最新バージョンがあるかどうか
インストールしたパッケージに新しいバージョンが存在するには、npm outdated
コマンドを使用します。
ローカルパッケージの場合
npm outdated
グローバルパッケージの場合
npm outdated -g
パッケージが表示された場合は、新しいバージョンが存在するので、更新しましょう。
パッケージを更新する
個別に1つずつ更新することもできますが、数が多くなると面倒だと思われるので、まとめて更新してしまいましょう。
まとめて更新するには npm update
コマンドを使用します。
npm update
コマンドを実行すると、package.json と package-lock.json ファイルは自動で更新されます。
ローカルパッケージの場合
npm update
グローバルパッケージの場合
npm update -g
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