比 nvm 更好用的 node 版本管理工具

2023-09-08 12:00:47

什麼是 Volta

Volta 是一種管理 JavaScript 命令列工具的便捷方式。

volta 的特點:

  • 速度
  • 無縫,每個專案的版本切換
  • 跨平臺支援,包括 Windows 和所有 Unix shell
  • 支援多個包管理器
  • 穩定的工具安裝-無需每次升級都重新安裝!
  • 可延伸性掛鉤用於特定於站點的客製化

為什麼選擇 Volta?

使用 Volta,您可以一次選擇 Node 引擎,然後不再擔心它。您可以在專案之間切換,而不必手動切換 nodejs 版本。你可以在工具鏈中安裝 npm 二進位制包,而不必定期重新安裝它們,或者弄清楚它們停止工作的原因。

快速設定和切換 Node 版本

獲取並使用特定版本的 Node:

volta install node@14

您應該立即注意到該工具的響應速度有多快。您的開發時間是寶貴的 JavaScript 開發人員應該擁有時髦的工具。

為合作者提供可複製的環境

Volta 允許你用一個命令為一個專案選擇節點引擎和包管理器:

volta pin node@12

Volta 將 Node 引擎的準確版本儲存在 package.json,這樣你就可以把你的選擇提交給 git。從那時起,每次在專案目錄中執行 Node 時,Volta 都會自動切換到您選擇的同一版本 的 Node。類似的。所有的合作者都可以通過在他們的開發機器上安裝 Volta 來做同樣的事情。

Install and forget

Volta 還允許您將最喜歡的二進位制包作為命令列工具安裝,而不必擔心它們會干擾您的開發專案。更好的是,這些工具在安裝時被固定到特定的 Node 引擎上,除非您顯式地告訴它們,否則它們不會更改。這意味著一旦一個工具工作了,它就會繼續工作。

npm install -g surge
surge -h

安裝 Volta

在安裝 Volta 前, 如果有使用其它的 nodejs 管理工具/nodejs,可以提前解除安裝(非必須)。

Unix 安裝

在大多數 Unix 系統(包括 macOS)上,您可以使用一個命令安裝 Volta:

curl https://get.volta.sh | bash

對於 bash, zsh
fish,這個安裝程式將自動更新控制檯啟動指令碼。如果您希望防止修改控制檯啟動指令碼,請參閱跳過 Volta 設定。要手動設定你的 shell 使用 Volta,編輯你的控制檯啟動指令碼如下:

  • VOLTA_HOME 變數設定為 $HOME/.volta
  • $VOLTA_HOME/bin 新增到 PATH 變數的開頭

Windows 安裝

對於 Windows,下載並執行 Windows 安裝程式並按照說明操作。

Volta 的功能依賴於建立符號連結,所以你必須:

  • 啟用開發者模式(推薦)
  • 以提升的許可權執行 Volta(不推薦)

Windows 下的 linux 子系統

如果您在 Linux 的 Windows 子系統中使用 Volta,請遵循上面的 Unix 安裝指南。

使用 Volta

Volta 的工作是管理 JavaScript 命令列工具,如 node、npm、yarn 或作為 JavaScript 包的一部分發布的可執行檔案。

與包管理器類似,Volta 會根據當前目錄跟蹤您正在處理的專案(如果有的話)。Volta 工具鏈中的工具會自動檢測您所處的專案是否使用特定版本的工具,併為您路由到正確的工具版本。

管理您的工具鏈

您可以使用兩個命令控制由 Volta 工具鏈管理的工具: Volta installVolta uninstall

安裝 node 引擎

要將工具安裝到工具鏈中,需要設定該工具的預設版本。Volta 將始終使用這個預設值,除非您在一個已設定 Volta 使用不同版本的專案目錄中工作。當您選擇預設版本時,Volta 也會將該版本下載到本地快取中。

例如,您可以選擇 node 的確切版本作為預設版本:

volta install [email protected]

你不需要指定一個精確的版本,在這種情況下,Volta 會選擇一個合適的版本來匹配你的請求:

volta install node@14

你也可以指定最新版本,或者甚至完全不選擇版本,Volta 將選擇最新的 LTS 版本:

volta install node

一旦您執行了這些命令中的一個,在您的 PATH 環境(或 Windows 中的 PATH)中由 Volta 提供的節點可執行檔案將在預設情況下自動執行您選擇的 node 版本。

同樣地,你可以使用 volta install npmvolta install Yarn 分別選擇 npm 和 Yarn 包管理器的版本。這些工具將使用您選擇的 Node 的預設版本執行。

安裝二進位制包

使用 Volta,使用包管理器全域性安裝命令列工具也會將其新增到工具鏈中。例如,vuepress 包包含一個同名的可執行檔案:

yarn global add vuepress

當您將一個包安裝到工具鏈上時,Volta 會獲取當前的預設 Node 版本,並將該工具固定到該引擎上(有關更多資訊,請參閱包二進位制檔案)。
Volta 不會改變工具的固定引擎,除非你更新工具,無論如何。這樣,您就可以確信您安裝的工具不會在您背後更改。

管理您的專案

Volta 允許團隊或共同作業者社群標準化他們在專案中使用的開發工具。

固定 Node 引擎

volta pin 命令允許您為專案選擇 Node 引擎和包管理器版本:

volta pin [email protected]
volta pin [email protected]

Volta 會把這個放在你的 package.json,這樣你就可以把你選擇的工具提交到版本控制:

"volta": {
  "node": "12.20.2",
  "yarn": "1.19.2"
}

這樣,每個使用 Volta 在專案上工作的人都會自動獲得您選擇的相同版本。

node --version # 12.20.2
yarn --version # 1.19.2

使用專案工具

node 和包管理器可執行檔案並不是工具鏈中唯一的智慧工具:工具鏈中的包二進位制檔案也知道您的當前目錄,並尊重您所在專案的設定。

例如,安裝 Typescript 包會將編譯器 tsc 新增到你的工具鏈中:

npm install --global typescript

根據你所在的專案,這個可執行檔案會切換到專案選擇的 TypeScript 版本:

cd /path/to/project-using-typescript-3.9.4
tsc --version # 3.9.4

cd /path/to/project-using-typescript-4.1.5
tsc --version # 4.1.5

安全方便

因為 Volta 的工具鏈總是跟蹤你在哪裡,它確保你使用的工具總是尊重你正在做的專案的設定。這意味著您不必擔心在專案之間切換時更改已安裝軟體的狀態。

更重要的是,當 Volta 執行一個工具時,它會覆蓋它的軌跡,確保你的 npm 或 Yarn 指令碼永遠不會看到你的工具鏈中有什麼。

這兩個特性的結合意味著 Volta 解決了全域性包的問題。換句話說,Volta 為您提供了全域性包安裝的便利,但沒有危險。

例如,你可以使用 npm i -g typescript 安全地安裝 TypeScript,並享受直接呼叫 tsc 的便利無需擔心專案的包指令碼可能意外地依賴於您的機器的全域性狀態。

Pnpm 支援

對 pnpm 的支援目前是實驗性的。要啟用該功能,請確保環境變數 VoLTA_FEATURE_PNPM 設定為 1。在 Windows 上可以新增到環境變數中。在 Linux/Mac 上,您可以在組態檔指令碼中設定該值(例如 .bash_profile.zshrc 或類似的指令碼)。

已知的限制

全域性安裝:目前不支援全域性安裝(例如 pnpm install -g),並且會導致錯誤。

遷移:目前還沒有自動遷移功能,因此如果您以前將 pnpm 作為 Volta 全域性檔案安裝,則需要通過呼叫 Volta install pnpm 手動重新安裝它。在啟用支援並重新安裝之前,您可以通過 volta uninstall pnpm 解除安裝之前安裝的 pnpm 包。一旦切換到本機 pnpm 支援,由於目前缺乏解除安裝實現,可能無法通過呼叫相同的命令來刪除孤立的舊 pnpm 包。

Volta 命令

Volta 1.1.1
The JavaScript Launcher ⚡

    To install a tool in your toolchain, use `volta install`.
    To pin your project's runtime or package manager, use `volta pin`.

USAGE:
    volta [FLAGS] [SUBCOMMAND]

FLAGS:
        --verbose    Enables verbose diagnostics
        --quiet      Prevents unnecessary output
    -v, --version    Prints the current version of Volta
    -h, --help       Prints help information

SUBCOMMANDS:
    fetch          Fetches a tool to the local machine
    install        Installs a tool in your toolchain
    uninstall      Uninstalls a tool from your toolchain
    pin            Pins your project's runtime or package manager
    list           Displays the current toolchain
    completions    Generates Volta completions
    which          Locates the actual binary that will be called by Volta
    setup          Enables Volta for the current user / shell
    run            Run a command with custom Node, npm, pnpm, and/or Yarn versions
    help           Prints this message or the help of the given subcommand(s)

volta fetch 將工具快取到本地機器以供離線使用

volta install 設定工具的預設版本

volta uninstall 從工具鏈中解除安裝工具

volta pin 固定專案的執行時或包管理器

volta list 顯示當前工具鏈

volta completions 命令補全

volta which 檢視 volta 安裝的工具的目錄

volta setup 為當前使用者/shell 啟用 volta

volta run 執行帶有自定義Node、npm、pnpm和/或Yarn版本的命令

volta help 輸出幫助資訊

結束語

如果你在工作中遇到有多個專案使用不同版本的 nodejs,就來試試Volta吧!