[TOC] #### 1. 前言 --- 當(dāng)開發(fā)多個(gè)項(xiàng)目時(shí),每個(gè)項(xiàng)目運(yùn)行環(huán)境要求的 node 版本不一樣,那么我們就需要給每個(gè)項(xiàng)目指定 node 版本,也就是通過終端執(zhí)行 nvm install 和 nvm use 命令去安裝并切換版本。 但是每次都要在終端手動(dòng)執(zhí)行命令就很麻煩,特別是項(xiàng)目越來越多的時(shí)候,容易忘記切換版本或切換錯(cuò)版本,會(huì)導(dǎo)致項(xiàng)目啟動(dòng)不了或運(yùn)行中有一些錯(cuò)誤。 這就需要一個(gè)管理 node 版本的方法,自動(dòng)切換 node 版本,這時(shí) .nvmrc 就該上場(chǎng)了 #### 2. .nvmrc 是什么 --- .nvmrc 的作用:便于切換 node 版本,保證多人開發(fā)環(huán)境的一致性 .nvmrc 是一個(gè)文件,文件內(nèi)容非常簡單,只有一個(gè) nvm 可識(shí)別的 node 版本文本內(nèi)容,比如: v12.18.2,這個(gè)文件應(yīng)該放在項(xiàng)目根目錄下,并且不應(yīng)被 git 忽略 #### 3. 創(chuàng)建 .nvmrc 文件 --- 打開終端,進(jìn)入項(xiàng)目根目錄執(zhí)行以下命令,使用 nvm 可識(shí)別的版本號(hào)格式即可: 以下命令會(huì)將字符串填入指向的文件中并創(chuàng)建,當(dāng)文件存在時(shí),則會(huì)對(duì)文件進(jìn)行重寫 ```bash echo "12.18.2" > .nvmrc echo "v12.18.2" > .nvmrc echo "lts/fermium" > .nvmrc ``` #### 4. 使用 .nvmrc 文件 --- 在有 .nvmrc 文件的目錄執(zhí)行以下命令,會(huì)讀取并嘗試切換 .nvmrc 中的 node 版本 該命令會(huì)從當(dāng)前目錄向上遍歷目錄結(jié)構(gòu)尋找 .nvmrc 文件,在帶有 .nvmrc 的目錄的任何子目錄運(yùn)行該命令都會(huì)起作用 ``` nvm use ``` 如果 .nvmrc 中的 node 版本已安裝,當(dāng)前終端窗口的 node 將自動(dòng)切換為該版本 ![](https://img.itqaq.com/art/content/8b472a53536c29691b54653055ac6846.png) 如果 .nvmrc 中的 node 版本沒有安裝,將會(huì)出現(xiàn)以下提示 ```bash # 不適用:版本 v14.15.0 尚未安裝 N/A: version "v14.15.0" is not yet installed. # 您需要運(yùn)行 nvm install 來安裝并使用 .nvmrc 中指定的 node 版本 You need to run `nvm install` to install and use the node version specified in `.nvmrc`. ``` ![](https://img.itqaq.com/art/content/4cc8b86b9f871a93f049e08b9a546955.png) 接下來使用以下命令,nvm install 不帶參數(shù)時(shí)會(huì)從 .nvmrc 中讀取 node 版本,如果該 node 版本沒有安裝,將自動(dòng)進(jìn)行下載,下載好后會(huì)將當(dāng)前窗口的 node 切換為此版本。如果該版本已經(jīng)安裝,會(huì)跳過下載,只將當(dāng)前窗口的 node 切換 ``` nvm install ``` ![](https://img.itqaq.com/art/content/782ca89d806731a79c6e88ffa98b6017.png) #### 5. 終端自動(dòng)切換版本 --- 當(dāng)使用 nvm use 切換版本仍然覺得麻煩,想要打開終端自動(dòng)切換 node 版本,也可以實(shí)現(xiàn) zsh 終端根據(jù) .nvmrc 文件自動(dòng)切換 node 版本: 在 `$HOME/.zshrc` 中添加以下代碼后,每次進(jìn)入一個(gè)包含 .nvmrc 文件的目錄時(shí)自動(dòng)調(diào)用 `nvm use` ``` # 溫馨提示: 將其放在 nvm 初始化之后 # nvm 根據(jù) .nvmrc 自動(dòng)切換 node 版本 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 文件后,執(zhí)行以下命令使其立即生效 ``` source ~/.zshrc ``` 效果如下所示,進(jìn)入一個(gè)含有 .nvmrc 文件的目錄會(huì)自動(dòng)切換當(dāng)前窗口的 node 版本,退出目錄時(shí)自動(dòng)切換為默認(rèn) node 版本 ![](https://img.itqaq.com/art/content/0fe0a4117ff500733402949df308029a.png)