【Mac+Node】Mac に node.js（と Python2）をインストール。時々 ncu。

## nodebrew のインストール
### nodebrew は node のバージョンを切り替えて使うことができる管理ツール。
環境によっては、node の特定のバージョンでしか動かせない場合があり、バージョンを切り替えたいケースがあるため。
brew を使うには、予め [homebrew](https://qiita.com/nekyo/items/46ab6ae5d875b932cfbc) をインストールしておく必要がある。（[インストール方法はこちら](https://qiita.com/nekyo/items/46ab6ae5d875b932cfbc))

```
% brew install nodebrew
```

### リモートのバージョンを一覧
既に用意されているインストール元のバージョンが一覧できる。
このバージョンを指定してインストールする。
```
% nodebrew ls-remote
v0.0.1    v0.0.2    v0.0.3    v0.0.4    v0.0.5    v0.0.6
             :
io@v1.0.0 io@v1.0.1 io@v1.0.2 io@v1.0.3 io@v1.0.4 io@v1.1.0 io@v1.2.0 io@v1.3.0
             :
```
v と io があるが、途中で io にフォークして、v4.0.0 から統合された様なので、v4.0.0 以降を使っている場合は特に関係ない。
### node のインストール
バイナリファイルを直接インストールする。
例えば v14.20.0 を使いたい場合は以下の様に実行する。
```
% nodebrew install-binary v14.20.0
```
### MacのM1,M2チップのマシンだとエラー！
Mac　の M1,M2 チップのマシンの場合、v16.0.0より前は、install-binary でエラーになる。
M1,M2 は arm扱いになるが、arm 用のバイナリがないため。
```
Can not fetch: https://nodejs.org/dist/v14.20.0/node-v14.20.0-darwin-arm64.tar.gz
```
### エラーの回避策
その場合はコンパイルを行う。
~/.nodebrew/src ディレクトリを確認し、なければ作成しておく。
```
% nodebrew compile v14.20.0
```
### カレントの設定
ローカルにインストールされているものは nodebrew ls で一覧できる。
カレントで使用したいバージョンを指定する。
```
% nodebrew use v14.20.0
```
### パスの設定
そのままではパスが効いていないので、以下を実行する。
bash の場合
```
% echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc
% source ~/.bashrc
```

zshの場合
```
% echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc
% source ~/.zshrc
```
### 要らないバージョンを消す場合は？
```
% nodebrew uninstall バージョン
```
これで削除されるが、~/.nodebrew/src/ 以下のディレクトリは削除されない。
こちらも不要なディレクトリは削除した方が良い。

----
## Python2 !!!!
macOS v12.3〜 Pyhton2が同梱されなくなった。
でも、node-gyp とかは Python3 非対応なので、ビルドには Python2 が必要。
なのに brew install python@2 はリポジトリから既に削除されていて見つからない。
brew install python では Python3 が入ってしまう。
このジレンマ。
### pyenv を使う。
pyenv は python の複数バージョンを切り替えられるツール。
brew でインストールして、パスが通る様に設定を行う。
（bash の場合は .zshrc を　.bashrc に読み替え）
```
% brew install pyenv
% echo 'eval "$(pyenv init -)"' >> ~/.zshrc
# 最下に以下の行を追加する。
% vim ~/.zshrc
alias brew='env PATH="${PATH//$(pyenv root)¥/shims:/}" brew'

% source ~/.zshrc
```
### python２ をインストール
```
# インストールできるバージョンを一覧
％ pyenv install --list
# 2系の latest は 2.7.18 なのでそれをインストール
% pyenv install 2.7.18
# インストールしたバージョンを global に設定
% pyenv global 2.7.18
# バージョン確認
% python --version
Python 2.7.18
```
### python3 は入ってるよね。
ちなみに Python3 はあらかじめ同梱されているはず。
```
% Python3 --version
Python 3.8.9
```
最新版や、別バージョンを使いたい場合は、python2 と同様にインストールする。

----
## ncu(npm-check-updates)
### package.json のライブラリが古くなる問題
node を使っていると package.json のライブラリのバージョンが古くなっているのが気になる。
なので、それをチェックしてくれる node-check-updates を使ってみる、
### node-check-updates のインストール
```
% npm i -g npm-check-updates
```
### アップデートチェック
以下のコマンドを実行すると一覧が表示される。
```
% ncu
Checking xxxx/package.json
[====================] 45/45 100%
 axios                               ^0.19.2  →   ^0.27.2
 chart.js                             ^2.9.4  →    ^3.8.2
 core-js                             ^3.21.1  →   ^3.24.0
  :
```
変更後のバージョン番号は色分けして表示される。
・<font color="red">赤がメジャーアップグレード</font>
・<font color="DarkTurquoise">青がマイナーアップグレード</font>
・<font color="LimeGreen">緑がパッチのアップグレード</font>
### package.json の更新
以下を実行すると package.json も更新してくれるが、流石にメジャーアップグレードを適用してしまうと動かなくなる可能性が高いので要注意。
なので、ここから先は自己責任で。動いている環境を丸々バックアップしておけば安心かも。
```
% ncu -u
```
マイナーバージョンアップだけ適用したい場合は --target minor をつけて実行する。
```
% ncu -u --target minor
```
パッチだけあてたい場合は --target patch をつけて実行する。
```
% ncu -u --target patch
```
後は、package-lock.json と /node_modulets を消して
npm cache clean --force でキャッシュをクリアして
npm install でライブラリを入れ替えればいいかな。