Node.js 多版本管理工具 nvm 的安裝與使用教程(含鏡像加速與常見坑)

適用人群:前端/后端/全棧開發者,Mac/Linux/Windows(nvm-windows)用戶;需要在多項目間快速切換 Node 版本、或在國內網絡環境下穩定安裝 Node。


一、為什么要用 nvm?

  • 一機多版本:不同項目依賴不同 Node 版本(如 16.x / 18.x / 20.x),nvm 可以一條命令切換。

  • 對系統無侵入:不需要 sudo,不污染系統路徑,卸載也很干凈。

  • 項目級約束:配合 .nvmrc 固定項目 Node 版本,團隊一致性更好。

  • 鏡像可配:國內可配置鏡像源,大幅提升安裝速度與成功率。

最佳實踐:開發機使用 nvm 管理 Node,避免系統級安裝(如 brew install node 或官方 pkg)造成 PATH 沖突。


二、TL;DR 快速開始(Mac/Linux,推薦)

# 1)可選:國內加速(建議先設置)
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs# 2)安裝 nvm(以 v0.39.7 為例,可改最新穩定版)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 或
#wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash# 3)讓當前 Shell 生效(Zsh 常用)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"# 4)裝一個穩定 LTS 版本并使用
nvm install --lts
nvm use --lts
node -v && npm -v

若重開終端后 nvm 不生效,請將 第3步的兩行加入 ~/.zshrc~/.bashrc,并執行 source ~/.zshrc(或重開終端)。


三、安裝 nvm(詳細版)

3.1 macOS / Linux(官方腳本,推薦)

  1. 準備鏡像環境(可選但強烈推薦)

    echo 'export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node' >> ~/.zshrc
    echo 'export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs' >> ~/.zshrc
    source ~/.zshrc
    
  2. 執行官方安裝腳本

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    # 或 wget -qO-
    
  3. 寫入 Shell 啟動配置(安裝腳本通常會自動寫入,若未成功手動添加)

    # Zsh(macOS 新系統默認)
    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' >> ~/.zshrc
    source ~/.zshrc# Bash
    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' >> ~/.bashrc
    source ~/.bashrc
    
  4. 驗證安裝

    command -v nvm
    nvm --version
    

3.2 macOS(Homebrew 方式,次選)

說明:nvm 官方推薦腳本安裝。若使用 Homebrew,需要手動設置環境變量并創建工作目錄。

brew install nvm
mkdir -p ~/.nvm# Apple Silicon(M 系,Homebrew 默認前綴 /opt/homebrew)
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
echo '[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && . "/opt/homebrew/opt/nvm/nvm.sh"' >> ~/.zshrc# Intel Mac(Homebrew 前綴 /usr/local)
# echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
# echo '[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"' >> ~/.zshrcsource ~/.zshrc
nvm --version

避免沖突:若機器上曾用 brew install node 或官方 pkg 安裝 Node,請先卸載它們(或至少確保 PATH 順序讓 nvm 管理的 Node 優先)。

3.3 Windows(nvm-windows)

  • Windows 下常用的是 nvm-windows(與 nvm 項目不同代碼庫,但命令類似)。

  • 安裝步驟:

    1. 卸載先前用官方 msi 安裝的 Node(如已安裝)。

    2. 下載并安裝 nvm-setup(管理員運行)。

    3. 安裝時選擇 nvm 根目錄Node 安裝目錄(默認即可)。

    4. 通過命令提示符/PowerShell 使用:

      nvm version
      nvm node_mirror https://npmmirror.com/mirrors/node
      nvm npm_mirror https://npmmirror.com/mirrors/npm
      nvm install lts
      nvm use lts
      node -v
      
  • 差異提示:nvm-windows 使用全局 symlink 切換 Node,切換時需要管理員權限的情況更多;.nvmrc 文件不自動生效(可寫腳本或使用工具實現)。


四、常用命令速查

# 安裝/切換
nvm install <version>           # 例如:nvm install 20.18.0 / nvm install --lts / nvm install node(最新)
nvm use <version>               # 切換到指定版本
nvm alias default <version>     # 設置默認版本(新終端自動使用)
nvm uninstall <version>         # 卸載某版本# 查詢
nvm ls                          # 查看本機已安裝版本
nvm ls-remote                   # 查看可安裝版本(受鏡像/網絡影響)
nvm current                     # 當前使用版本# 遷移全局包(例如從 16 遷移到 18)
nvm reinstall-packages 16

小技巧:nvm install --lts --latest-npm 可在安裝 LTS 的同時升級到較新的 npm(不同版本行為可能略有差異)。


五、項目內固定 Node 版本(.nvmrc

  1. 在項目根目錄創建 .nvmrc

    v18
    # 或 18.20.3 / lts/* / v20
    
  2. 使用(進入項目目錄后):

    nvm use        # 讀取 .nvmrc 自動切換
    nvm install    # 如未安裝會直接安裝 .nvmrc 指定的版本
    
  3. 自動切換建議

    • Zsh 用戶可使用插件(如 zsh-nvm)或 direnv 在進入目錄時自動執行 nvm use


六、國內網絡環境與加速策略

  • Node 鏡像

    export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
    export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs
    
  • npm 源(按需)

    npm config set registry https://registry.npmmirror.com
    # 恢復官方源:
    # npm config set registry https://registry.npmjs.org
    
  • 代理(公司/校園網)

    export HTTP_PROXY=http://127.0.0.1:7890
    export HTTPS_PROXY=http://127.0.0.1:7890
    
  • Apple Silicon 注意:優先安裝 arm64 對應的 Node 版本,避免 Rosetta 兼容層導致的二進制不匹配。


七、與包管理器協作(npm / pnpm / yarn / corepack)

  • npm:隨 Node 安裝,不同 Node 版本對應不同的全局包目錄。

  • pnpm / yarn

    • Node 新版本中內置 Corepack(部分版本需手動啟用):

      corepack enable
      # 指定版本
      corepack prepare pnpm@latest --activate
      
    • 項目建議使用鎖文件package-lock.json / pnpm-lock.yaml / yarn.lock)保障一致性。

  • 不要在 nvm 場景下修改 npm 全局 prefix 到系統路徑,也不要使用 sudo npm -g


八、常見問題(FAQ)與排查

  1. nvm: command not found

    • 是否把下列內容寫入了 shell 配置文件(~/.zshrc~/.bashrc)并 source

      export NVM_DIR="$HOME/.nvm"
      [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
      
    • 是否開啟了新終端?是否有安全軟件阻攔?

  2. node 版本切換后仍不生效

    • 可能 PATH 中仍有系統 Node(如 Homebrew/官方 pkg)優先生效。

    • 解決:卸載系統 Node,或確保 nvm 管理的路徑在 PATH 前。

  3. 安裝 Node 速度慢或失敗

    • 確認鏡像變量 NVM_NODEJS_ORG_MIRROR 已設置并生效。

    • 公司/學校網絡需配置 HTTP/HTTPS 代理。

  4. 全局包丟失(切換版本后找不到全局命令)

    • 不同 Node 版本的全局包隔離。使用:

      nvm reinstall-packages <舊版本號>
      
  5. nvm 與 Homebrew 沖突

    • 若曾 brew install node,請卸載或保證 nvm 的 node 在 PATH 前。

  6. Windows 下切換失敗或權限問題

    • 以管理員身份運行 PowerShell;關閉占用 Node 的進程;必要時重啟終端。


九、團隊協作與 CI 提示

  • 在倉庫根目錄提供:

    • .nvmrc(如 v18

    • 包管理器鎖文件(確保依賴可重復安裝)

  • CI(GitHub Actions/GitLab CI)不必安裝 nvm,可直接使用官方 setup-node/runner 的 node,但本機開發與 CI 的 Node 版本務必一致(遵循 .nvmrc)。


十、最佳實踐清單(可直接套用)

  • 安裝前先設置鏡像:NVM_NODEJS_ORG_MIRROR

  • 統一使用 LTS:nvm install --lts && nvm alias default lts/*

  • 每個項目放一個 .nvmrc,并在進入項目目錄后執行 nvm use

  • 不使用 sudo npm -g,需要的 CLI 盡量 npx 或加到 devDependencies

  • 切換大版本后執行 nvm reinstall-packages 遷移常用全局包。

  • 避免同時存在系統級 Node 與 nvm Node;若必須共存,確保 PATH 順序正確。


最后小總結

使用 nvm 管理 Node 版本是本地開發環境的“地基工程”。配置好鏡像與 .nvmrc 后,你的多項目協作、版本切換、團隊一致性都會顯著提升。如果你在安裝或切換過程中遇到特殊報錯,歡迎在評論區貼出你的系統信息與命令輸出,一起排查。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94828.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94828.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94828.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity Shader unity文檔學習筆記(二十一):幾種草體的實現方式(透明度剔除,GPU Instaning, 曲面細分+幾何著色器實現)

1.透明度剔除&#xff08;性能較差&#xff0c;不同顏色時需要不同材質會導致多個dc&#xff09; clip(_Color.a - _Cutoff); 傳入值為0時 剔除 類似的草體效果&#xff1a; 2.GPU Instaning(可以自定義一次性合批最多1023個&#xff0c;能夠傳遞顏色值等等&#xff08;做草…

UX 設計入門終章:讓洞察落地!用用戶流程圖、IA 和旅程圖,設計用戶與產品的互動故事

歡迎來到本系列課程的最后一課。 如果你把之前的學習比作是繪制一份建筑藍圖&#xff0c;那么今天&#xff0c;你將根據自己收集到的所有用戶數據&#xff0c;描繪出空間布局&#xff08;用戶流程圖&#xff09;、理清結構關系&#xff08;信息架構&#xff09;&#xff0c;并最…

【RAG知識庫實踐】向量數據庫VectorDB

一、概述 1.1 什么是向量庫 向量數據庫是一種專門為存儲、索引和查詢高維向量數據而優化的數據庫系統。與傳統的關系型數據庫不同,向量數據庫將數據映射到向量空間中,使得數據的相似性計算、聚類、分類和檢索變得更加高效和精確 向量數據庫一般包括以下幾個部分:索引、查詢…

EasyExcel 3.x 導出動態表頭,動態sheet頁

動態導出sheet頁Overridepublic void exportAnswerListV1(HttpServletResponse response, SmtSurveyUserAnswerRecord smtSurveyUserAnswerRecord) {// 1. 準備問卷數據String formType smtSurveyUserAnswerRecord.getFormType();if (ObjectUtil.isEmpty(formType)) {throw ne…

重學JS-004 --- JavaScript算法與數據結構(四)JavaScript 表單驗證

文章目錄HTMLlabel 屬性input 屬性button 屬性fieldset 屬性select 屬性option 屬性div 屬性scriptgetElementByIdquerySelectorAllnull循環模版文字函數事件監聽器regex舉例StringMathArrayHTML HTML 屬性應該用雙引號引起來。 label 屬性 for“” input 屬性 id“” typ…

本地搭建 Redis/MySQL 并配置國內鏡像加速(Docker/原生安裝 | macOS/Linux/Windows)

適用人群&#xff1a;前端/后端/數據/測試工程師&#xff1b;需要在單機上快速搭建 Redis 與 MySQL 的開發環境&#xff1b;同時在國內網絡環境下加速下載&#xff08;容器鏡像、系統包倉庫&#xff09;。文章結構&#xff1a;一圖流 → TL;DR → Docker 方式 → 原生安裝&…

SynClub-百度在海外推出的AI社交產品

本文轉載自&#xff1a;SynClub-百度在海外推出的AI社交產品 - Hello123工具導航 ** 一、&#x1f916; SynClub 是什么&#xff1f; SynClub 是百度出海的 AI 社交產品&#xff0c;主打 "打造專屬 AI 朋友" 的創新概念&#xff0c;讓你在虛擬世界擁有真正懂你的貼…

Easy Rules規則引擎:輕量級Java規則處理實踐指南

引言:業務規則與代碼解耦的藝術 在現代軟件開發中,業務規則頻繁變更與核心邏輯穩定性之間的矛盾日益突出。傳統硬編碼的if-else語句在面對復雜業務場景時會導致: 代碼臃腫:成百上千的條件分支難以維護 耦合度高:業務邏輯與系統架構深度綁定 變更成本高:微小規則調整需要…

機器人 - 無人機基礎(5) - 飛控中的傳感器

目錄 一、加速度計 1.1 加速度計原理 1.2 加速度計校準 1.2.1 誤差模型 1.2.2 關于MPU6050校準方式 與 代碼思路 二、陀螺儀 2.1 陀螺儀原理 2.1.1 科里奧利力 2.1.2 陀螺儀原理 2.2 陀螺儀校準 三、加速度計與陀螺儀濾波部分 四、磁力計 4.1 磁力計原理 4.2 磁力…

PHP - 線程安全 - 疑問與答案

線程安全問題&#xff08;多線程環境需加鎖&#xff09; 怎么理解 php有線程安全問題嗎要理解 PHP 中的線程安全問題&#xff0c;需要結合 PHP 的運行模式和線程安全的本質來分析&#xff1a;1. 線程安全的本質線程安全問題的核心是&#xff1a;當多個線程同時訪問共享資源&…

使用腳本進行監測以nginx狀態頁為例

1、首先打開nginx的狀態頁 location /nginx_status {stub_status on;}2、進行訪問測試 curl http://127.0.0.1/nginx_statusActive connections: 1 server accepts handled requests1 1 1 Reading: 0 Writing: 1 Waiting: 03、在客戶端編寫腳本進行數據采集 編寫腳本方便采集不…

prettier、eslint、stylelint在項目中使用

prettier 1&#xff09;vscode中使用 a. 安裝插件(Prettier)安裝成功后&#xff0c;在你打開支持的文件時&#xff0c;下方文件信息狀態欄會有prettier標致&#xff1a;雙擊它或者直接在輸出命令窗口那里查看prettier的日志信息&#xff1a;從日志這里可以看出&#xff0c;它是…

【C++】類對象內存布局與大小計算

1. 計算類對象的大小類實例化的對象中只存儲成員變量&#xff0c;不存儲成員函數&#xff0c;函數要用是通過 this 指針拿的。因為一個類可以實例化出 N 個對象&#xff0c;每個對象的成員變量都可以存儲不同的值&#xff0c;但是調用的函數卻是同一個。如果每個對象都成員函數…

容易忽視的TOS無線USB助手配網和接入USB使用: PC和TOS-WLink需要IP暢通,

引言&#xff1a;我們常常把重心放在了TOS-WLink的加入路由器&#xff0c;獲取IP&#xff1b;常常忽視了其實是要求PC和TOS-WLink需要IP暢通TOS無線USB助手首次藍牙配網, 無線接入USB設備到電腦, 分為是兩個過程&#xff1a;1, 藍牙連接TOS-WLink&#xff0c;如果配置的WIF…

學習Python中Selenium模塊的基本用法(7:元素操作-1)

定位網頁元素后&#xff0c;Selenium模塊支持點擊、發送文本或按鍵、清除內容等操作。本文以百度網站為例學習并測試這幾類操作的基本用法。首先是發送文本或按鍵&#xff0c;主要用到send_keys函數&#xff0c;如果是發送文本&#xff0c;則直接將文本內容作為函數入參即可&am…

使用MP4視頻格式鏈接地址的自適應視頻彈窗實現方案HTML代碼

以下是使用MP4視頻格式鏈接地址的自適應視頻彈窗實現方案&#xff1a;視頻彈窗播放器 使用原生MP4視頻格式鏈接&#xff0c;直接通過HTML5 video元素播放 響應式設計適配不同屏幕尺寸&#xff0c;16:9視頻比例保持不變 底部視頻列表可橫向滾動&#xff0c;點擊縮略圖切換不同視…

中農具身導航賦能智慧農業!AgriVLN:農業機器人的視覺語言導航

作者&#xff1a;Xiaobei Zhao, Xingqi Lyu, Xiang Li單位&#xff1a;中國農業大學論文標題&#xff1a;AgriVLN: Vision-and-Language Navigation for Agricultural Robots論文鏈接&#xff1a;https://arxiv.org/pdf/2508.07406v1代碼鏈接&#xff1a;https://github.com/Al…

Zynq開發實踐(Verilog、仿真、FPGA和芯片設計)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】zynq最大的優勢&#xff0c;就是把arm和fpga結合在一起了。這樣一顆soc里面&#xff0c;就可以用軟件去驅動外設ip&#xff0c;這是之前沒有過的體驗…

LabVIEW刺激響應測量解析

?該 LabVIEW 程序用于刺激 - 響應測量&#xff0c;實現測試信號生成、響應采集及測量分析&#xff0c;涵蓋信號同步、并行處理等概念&#xff0c;用于設備總諧波失真&#xff08;THD&#xff09;等電信號特性測量場景&#xff0c;借助 LabVIEW 圖形化編程優勢&#xff0c;將復…

Boosting(提升法)詳解

一、引言在集成學習&#xff08;Ensemble Learning&#xff09;中&#xff0c;Boosting&#xff08;提升法&#xff09; 是一種非常經典且強大的方法。它通過將多個弱學習器&#xff08;Weak Learners&#xff09;進行迭代組合&#xff0c;逐步提升整體的預測性能&#xff0c;從…