.nvmrc 多專案 node js 版本自動切換

透用 nvm 自動切換 node js 版本

使用情境

本地開發機若有多個專案、每個專案都有不同的 node js 版本
開發時在多個專案間切換,常常會忘了變更 node js 版本;造成專案無法正常運作或 build

`Requirement

暸解以下部份安裝與使用知識

  • bash or zsh
  • nvm
  • node js

How / 如何運作

通常有多個 node js 版本都會透過 nvm 做切換、安裝
nvm 本身提供了短短的 script,幫助使用者在變更專案目錄時進行 node js 版本切換

ref. https://github.com/nvm-sh/nvm

.nvmrc

在 .nvmrc 內記載指定的 node js 版號

.nvmrc 的內容

v12.22

在切換目錄時會自動讀取 .nvmrc 再進行版本變更
ps: 若是未安裝的版本,則會自動進行安裝

目錄下如果沒有 .nvmrc 檔將會透過 nvm 切換至 default 的版本

支援的切換語法

zsh 安裝 / install

以下取自上述連結 (zsh) (官網)

打開本機的 ~/.zshrc 或 ~/.zshenv
將以下內容貼在檔案最下方後儲存

# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

重新讀取、載入 source ~/.zshenv 或 source ~/.zshrc

Test / example

展示~

  • nvm default 版本
  • 切換至特定目錄時因為有設定 .nvmrc 所以自動變更 node 版本
  • 再切換到沒有 .nvmrc 的位置時 node 版本自動切換回 default 版本

1個讚

那做完這些設定,以後每次我打開專案,它會自動切成我指定的版本,這樣對嗎?

對喔
例如,nvm default v10
這樣整台電腦預設是 v10 的版本

如果有個專案目錄叫 cola-project 資料夾裡有 .nvmrc 裡面版號為 v16
進入 /cola-project 資料夾時,就會自動切換至 v16 版本

然後,切換到其它目錄的時候 (沒有 .nvmrc 的目錄)
就會再自動切換到 default 的 v10 版本

1個讚

OK 成功了 :partying_face: :pray:

1個讚