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