自動切換 Node.js 的版本

前言

在開發 Node.js 專案時,因為版本更新的速度很快,新舊專案常常需要使用不同版本的 Node.js。
尤其是在維護舊專案時,經常會忘記目前專案適合的版本,每次手動切換 Node.js 版本,不僅麻煩,還容易出錯。

這篇文章將說明如何安裝 NVM,並且當進入專案目錄時,可以自動載入對應的 Node.js 版本。

1. 安裝 NVM

NVM 是一個管理多個 Node.js 版本的工具。通過以下指令來安裝 NVM:

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

執行完上述指令後,NVM 會被安裝到系統當中。接下來,需要重新載入設定,可以直接在 Terminal 中執行以下命令:

1
source ~/.zshrc

這樣,就可以在 Terminal 中使用 nvm 指令了。

2. 在專案中設定 Node.js 版本

接下來,需要在每個專案的根目錄下創建一個 .nvmrc 檔案,並在其中指定想要使用的 Node.js 版本。
例如,假設要使用 Node.js 18:

1
echo "18" > .nvmrc
1
nvm use

這樣,進入這個專案目錄時,就可以透過指令快速切換版本

3. 進入目錄時自動載入 Node.js 版本

但是每次都要執行指令太麻煩了,可以將流程改成進入專案目錄時自動載入對應的 Node.js 版本,所以需要在設定中加上一段腳本,並修改 cd 指令的行為。
這樣當每次切換到專案目錄時,就會自動載入正確的 Node.js 版本。

~/.zshrc 中添加以下內容:

1
2
3
4
5
6
7
8
9
10
11
12
# 自動載入 .nvmrc 指定的 Node.js 版本
autoload_nvmrc() {
if [ -f .nvmrc ]; then
nvm use > /dev/null 2>&1
fi
}

# 修改 cd 指令,自動切換 Node.js 版本
cd() {
builtin cd "$@" && autoload_nvmrc
}

1
2
3
4
5
6
7
8
# 如果需要切換回預設的版本,可以改成以下的寫法
autoload_nvmrc() {
if [ -f .nvmrc ]; then
nvm use > /dev/null 2>&1
else
nvm use default > /dev/null 2>&1
fi
}

這段腳本首先定義了一個 autoload_nvmrc,當檢測到 .nvmrc 檔案時,會自動執行 nvm use 切換到對應的 Node.js 版本。

接著,它覆蓋了系統預設的 cd 指令,在切換目錄時自動執行 autoload_nvmrc

4. 在 Terminal 啟動時自動載入 Node.js

為了讓這個自動化過程更加完善,可以在 Terminal 啟動時就檢查當前目錄是否有 .nvmrc 檔案,這樣即使直接打開 Terminal 進入專案目錄,Node.js 版本也會自動載入

~/.zshrc 中添加以下內容:

1
2
# 在 Terminal 啟動時檢查當前目錄是否需要載入 Node.js 版本
autoload_nvmrc

5. 確認設定是否成功

完成以上步驟後,重新打開一個新的 Terminal直接進入專案目錄
執行以下命令來確認當前使用的 Node.js 版本是否正確:

1
node -v

如果顯示的版本和 .nvmrc 中指定的版本一致,則說明自動載入功能已經生效

Reference