2022/01/10

nvm

nvm 是 Node.js 的版本管理器,可在同一台主機上安裝多個版本的 Node.js 環境,因為不同專案可能會使用不同的 NodeJS 版本,nvm 可讓不同版本的 NodeJS 並存,且可以動態因應專案而切換。

安裝

nvm 是一個 shell script,不是執行檔,安裝也直接用 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash 安裝即可

~$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14926  100 14926    0     0  37258      0 --:--:-- --:--:-- --:--:-- 38370
=> Downloading nvm from git to '/Users/charley/.nvm'
=> 正複製到 '/Users/charley/.nvm'...
remote: Enumerating objects: 347, done.
remote: Counting objects: 100% (347/347), done.
remote: Compressing objects: 100% (295/295), done.
remote: Total 347 (delta 39), reused 161 (delta 27), pack-reused 0
接收物件中: 100% (347/347), 196.36 KiB | 486.00 KiB/s, 完成.
處理 delta 中: 100% (39/39), 完成.
* (開頭指標分離於 FETCH_HEAD)
  master
=> Compressing and cleaning up git repository

=> Appending nvm source string to /Users/charley/.bash_profile
=> Appending bash_completion source string to /Users/charley/.bash_profile
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

nvm 會安裝到 /Users/user/.nvm 使用者的 ~/.nvm 目錄中,同時將以下的環境變數增加到 profile 設定 ( ~/.bash_profile~/.zshrc~/.profile~/.bashrc )

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

安裝後,可用以下指令確認安裝完成

command -v nvm

常用指令

版本號碼

$ nvm --version
0.38.0

ls

list 目前已經安裝的 nodejs

$ nvm ls
->     v14.17.5
default -> v14.17.5
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v14.17.5) (default)
stable -> 14.17 (-> v14.17.5) (default)
lts/* -> lts/fermium (-> v14.17.5)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.5 (-> N/A)
lts/fermium -> v14.17.5

list 遠端可安裝的 NodeJS 版本

nvm ls-remote

list 遠端可安裝的 NodeJS 版本,且限制 LTS 版本

nvm ls-remote --lts

install

安裝 NodeJS

nvm install v14.17.5

use

切換版本

nvm use v14.17.5

current

查詢目前版本

nvm current

run, exec

執行 NodeJS

nvm run node

執行特定版本的 node

nvm exec 12.8.1 node

which

查閱 nodejs 安裝路徑

$ nvm which v14.17.5
/Users/charley/.nvm/versions/node/v14.17.5/bin/node

alias

$ nvm alias
default -> v14.17.5
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v14.17.5) (default)
stable -> 14.17 (-> v14.17.5) (default)
lts/* -> lts/fermium (-> v14.17.5)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.5 (-> N/A)
lts/fermium -> v14.17.5

可以設定別名

nvm alias erbium v14.17.5

修改 default 版本

nvm alias default v14.17.5

npm

config

$ npm config ls
; cli configs
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.14.14 node/v14.17.5 darwin x64"

; project config /Users/charley/.nvm/.npmrc
package-lock = false

; node bin location = /Users/charley/.nvm/versions/node/v14.17.5/bin/node
; cwd = /Users/charley/.nvm
; HOME = /Users/charley
; "npm config ls -l" to show all defaults.

list 所有設定

npm config ls -l

可修改 prefix, cache 路徑

npm config set prefix "/Users/charley/.nvm/versions/node/v14.17.5"
npm config set cache "/Users/charley/.npm"

安裝 npm 套件

npm install requirejs -g
npm install uglify-js -g
npm install less -g

套件會安裝到這個目錄

~/.nvm/versions/node/v14.17.5/lib/node_module

切換 NodeJS 版本時, npm library 也要重新安裝

.nvmrc

可在專案目錄中,建立一個 .nvmrc 檔案,裡面記錄 NodeJS 版本號碼

echo "14.17.5" > .nvmrc

echo "lts/*" > .nvmrc # to default to the latest LTS version

echo "node" > .nvmrc # to default to the latest version

切換到專案後,可以用 use 指令,直接切換專案的 NodeJS 版本

nvm use

nvm github 有記錄如何切換目錄後,自動切換 node 版本的 script,但目前覺得不需要那麼自動

References

Mac 安裝 NVM

macOS安裝與移除NVM

Node.js 環境設定-for mac

nvm:安裝、切換不同 Node.js 版本的管理器

How to install Node.js and npm on macOS

NVM、NPM、Node.js的安裝選擇

1 則留言: