nvm, Node.js, npmをUbuntuで最新にUpdate

Node.js環境を年に2回程度使うのですが、使い方を毎回忘れているので備忘録として残しておきます。

# 環境

|種類|システムなど|備考|
|:-:|:-:|:--|
|OS|Ubuntu18.04.01LTS|Windowsから仮想で動かしています|
|Node.jsバージョン管理|nvm|もっといいのもありそうですが、たまにしか使わないので変えるのが面倒で調べていない|
|Node.jsパッケージ管理|npm|なんとなくnpm使っています|

# Update方法
## nvm
最初はnvmのバージョンチェックします

```bash
nvm --version
```

[GitHubの「Installing and Updating」](https://github.com/nvm-sh/nvm#install--update-script)にあるコマンドでnvmをアップデートします。[最新のバージョン](https://github.com/nvm-sh/nvm/releases)(*"v0.35.3"*の部分)に注意してください。
※Mac M1で試したときも同じでした。

```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
```

## Node.js
`nvm ls`で現在インストールされているNode.jsのバージョンを確認します。
以下の例ではv8.10.0とv12.16.1がインストールされており、現在はv12.16.1を使っていることがわかります。そして、最新のltsとしてv12.16.2があることがわかります。

```bash
$ nvm ls
        v8.10.0
->     v12.16.1
default -> lts/* (-> N/A)
node -> stable (-> v12.16.1) (default)
stable -> 12.16 (-> v12.16.1) (default)
iojs -> N/A (default)
unstable -> N/A (default)
lts/* -> lts/erbium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.20.0 (-> N/A)
lts/erbium -> v12.16.2 (-> N/A)
```

`nvm ls-remote`でリモートに登録されているNode.jsのバージョンの一覧を出力します。長いので途中省略。

```bash
$ nvm ls-remote

省略

       v12.16.0   (LTS: Erbium)
->     v12.16.1   (LTS: Erbium)
       v12.16.2   (Latest LTS: Erbium)
        v13.0.0
        v13.0.1
        v13.1.0
        v13.2.0
        v13.3.0
        v13.4.0
        v13.5.0
        v13.6.0
        v13.7.0
        v13.8.0
        v13.9.0
       v13.10.0
       v13.10.1
       v13.11.0
       v13.12.0
       v13.13.0
```

最新のLTSであるv12.16.2をインストールします。

```bash
nvm install v12.16.2
Downloading and installing node v12.16.2...
Downloading https://nodejs.org/dist/v12.16.2/node-v12.16.2-linux-x64.tar.xz...
#=#=-  #       #
####################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v12.16.2 (npm v6.14.4)
```

古いv12.16.1は使わないのでアンインストールします。

```bash
$ nvm uninstall v12.16.1
Uninstalled node v12.16.1
```

もう一度`nvm ls`で確認します。v12.16.1が消え、v12.16.2となっていることがわかります。

```bash
$ nvm ls
        v8.10.0
->     v12.16.2
default -> lts/* (-> v12.16.2)
node -> stable (-> v12.16.2) (default)
stable -> 12.16 (-> v12.16.2) (default)
iojs -> N/A (default)
unstable -> N/A (default)
lts/* -> lts/erbium (-> v12.16.2)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.20.0 (-> N/A)
lts/erbium -> v12.16.2
```

defaultを変える場合は以下のコマンドです。

```bash
$ nvm alias default v*.*.*
default -> v18.12.1
```

## npm
npmを最新にアップデートします。

```bash
nvm install-latest-npm
```

試しにパッケージをグローバルにインストールします(`-g`オプションがグローバル)。

```bash
npm install -g @sap-cloud-sdk/cli
```

`npm ls -g`でインストール済みパッケージの一覧を見ます。ツリー形式で見れるのですが、多くて見にくいです。

```bash
npm ls
```

`--depth=0`オプションをつけると依存パッケージが出力されないので見やすいです。

```bash
npm ls --depth=0
```

`npm outdated`を使うことでアップデート可能なパッケージを見ることができます。グローバルに対してだとこう。

```bash
npm outdated -g
```

# おまけ
## nvm のアップデート
なぜかupdateはscriptでできなかったのでマニュアルで実行しています。
GitHubに記載の[「Manual Upgrade」](https://github.com/nvm-sh/nvm#manual-upgrade)に従いました。

```bash
(
  cd "$NVM_DIR"
  git fetch --tags origin
  git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
) && \. "$NVM_DIR/nvm.sh"
```

## 使用するNodeのバージョン変更
以下のコマンドで使用するNodeのバージョンを変更できます。

```bash
nvm use <version>
```