【Node】在不同專案自動切換 Node 版本
在進行不同專案的時候,總是需要手動切換到不同的 Node 版本,很常忘記切換就會 run 失敗,讓我非常困擾。記錄一下解決的方法~
先行準備
- 安裝 nvm
- 安裝 bash 或 zsh
步驟
官方提供的方法是在資料夾底下新增 .nvmrc
檔,然後在 bash 或 zsh 裡加上一些 script,這樣每一次切換資料夾時,就會自動去抓 .nvmrc
裡的版本號,然後呼叫 nvm use <Version>
去做切換。
1. 建立 .nvmrc
檔案
在專案的根目錄底下新增 .nvmrc
檔,在裡面輸入版本號,可以直接打數字或是打 v版本
。
touch .nvmrc
echo "18" > .nvmrc
或是想要最新的版本可以打
echo "lts/*" > .nvmrc # 長期穩定 node.js 版本(LTS)
echo "node" > .nvmrc # 最新的 node.js 版本
2. 加入 script
這邊以 zsh 為例,先打開 .zshrc 檔
code ~/.zshrc # 每個人放的地方可能不一樣
在最後面加上
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version
nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
nvm use
fi
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
其他 command shell 的 script 可以參考官網:
深入了解
我們可以來簡單分析一下他的 script 邏輯:
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version
nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
如果 .nvmrc
的檔案存在的話,把檔案內容丟到變數 nvmrc_node_version
。
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
nvm use
如果輸入的版本號沒有下載的話,執行 nvm install
下載指定版本。
如果輸入版本號跟當前版本不同的話 ,使用 nvm use
來切換版本。
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
如果 .nvmrc
檔案不存在,且當前版本與預設不同的話,nvm use default
回到預 設版本。