配置nvmrc
前言
當開發多個項目時,每個項目運行環境要求的 node 版本不一樣,那麼我們就需要給每個項目指定 node 版本,也就是通過終端執行 nvm install 和 nvm use 命令去安裝並切換版本。
但是每次都要在終端手動執行命令就很麻煩,特別是項目越來越多的時候,容易忘記切換版本或切換錯版本,會導致項目啟動不了或運行中有一些錯誤。
這就需要一個管理 node 版本的方法,自動切換 node 版本,這時 .nvmrc 就該上場了
.nvmrc是什麼
通過上述說明大概知道.nvmrc文件,就是用來管理我們項目使用的node.js版本的。這個文件非常簡單:只有一個nvm可識別的node.js版本的文本。比如:v18.12.0
.nvmrc文件怎麼使用?
你可以創建一個 .nvmrc 文件,文件內容是一個node版本的數字或者其它nvm可以理解的文本;詳情可以在終端輸入 nvm --help 查看。
有了.nvmrc文件後,我們在終端沒有指定版本時執行 nvm use, nvm install, nvm exec, nvm run, 和 nvm which 命令時會使用 .nvmrc文件指定的版本。
創建 .nvmrc 文件
舉個例子,在當前目錄下,讓nvm指定18.12的最新發布版本,最新發布的LTS版本,最新發布的node版本。 使用 echo 字符串 > 指向 文件名可以把字符串填入指向的文件中並創建文件。使用以下命令會創建 .nvmrc文件
$ echo "18.12" > .nvmrc
# 設置最新LTS版本
$ echo "lts/*" > .nvmrc
# 設置最新版本
$ echo "node" > .nvmrc
nvm use
等命令將從當前目錄向上遍歷目錄結構尋找文件.nvmrc
。也就是說,在帶有 .nvmrc 的目錄的任何子目錄中運行nvm use等命令,.nvmrc 都會起作用。
.nvmrc
文件必須是一個 <version>
符合 nvm --help 所列出的,版本號後跟換行符。不允許尾隨空格,並且需要尾隨換行符。
像下圖一樣,v14.21.3後面沒有空格,直接回車換行。
深度集成到shell終端
您可以使用avn它來深度集成到您的 shell 中,並在更改目錄時自動調用nvm。
如果您更喜歡輕量級的解決方案,可以使用下面的方法。
zsh 終端根據 .nvmrc 文件自動執行切換node版本 在 $HOME/.zshrc
中添加以下代碼後。每當進入一個包含 .nvmrc
文件的目錄時自動調用 nvm use
, .nvmrc
文件的字符串告訴 nvm 使用哪個版本的node.js
# 打開 home 目錄,並編輯 .zshrc 文件
$ cd
$ vi .zshrc
這是需要寫入到 .zshrc
的代碼:
# 這一段代碼復制到 .zshrc 文件中
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
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" != "$(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
編輯好 .zshrc
文件後,執行 source .zshrc
使命令生效
$ source ~/.zshrc
在有.nvmrc
文件項目,打開vscode
的集成終端,會發現已經自動運行nvm use
,命令行有相應的輸出。