作者:Rosario De Chiara✏️
mise 和 asdf 是旨在幫助開發人員管理多個版本的程式語言和環境的工具。這兩個工具都旨在透過簡化工具版本之間的管理和切換來簡化多語言開發,這是使用不同程式語言和框架時的常見挑戰。
asdf 是一種流行的版本管理器,它使用一種稱為「shimming」的技術在 Python、Node.js 和 Ruby 等不同版本的工具之間切換。它會建立特定版本的臨時路徑,修改環境以確保在不同專案中使用正確版本的工具。但是,由於這些墊片的工作方式,此方法可能會帶來性能開銷。
mise 是法文「mise-en-place」的縮寫,即準備表格的方式,旨在透過消除對墊片的依賴來改進 asdf。
mise 用 Rust 編寫,直接修改 PATH 環境變量,從而加快執行時間。它旨在與 asdf 插件無縫協作,但提供命令模糊匹配等功能以及同時安裝相同工具的多個版本的能力。
要安裝 asdf,請按照入門指南根據您的系統安裝先決條件。環境準備好後,您可以在主目錄中 git clone 官方儲存庫:
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
上面的指令會將完成安裝所需的所有腳本和設定檔複製到 .asdf 目錄中。
上面安裝指南的下一步是執行安裝腳本。同樣,此步驟將取決於您的環境和作業系統的詳細信息,因此只需按照指南在 shell 初始化腳本中添加正確的腳本呼叫(例如 .bashrc、.bash_profile 等)。在此過程結束時,通常在重新啟動 shell 後,您應該能夠將 asdf 作為命令運行:
此時,asdf 正在運行,但要使用它進行一些有用的操作,您必須安裝插件來處理與您打算開發的專案相關的工具(用asdf 的說法)(例如Node.js、蟒蛇等) 。
為此,我們安裝了 Node.js 外掛。在 asdf 中,插件是一段程式碼,可讓您處理框架或程式庫的不同版本。在本例中,我們將安裝 Node.js 插件,然後安裝幾個版本的 Node.js 只是為了了解 asdf 將如何處理它們。
我們將使用以下程式碼安裝 Node.js 外掛程式:
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
請注意,您必須明確指定包含外掛程式原始碼的 git 儲存庫。插件安裝到位後,您可以透過以下命令使用它來安裝特定版本的 Node.js:
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
在此範例中,您安裝了最新版本,在撰寫本文時為 23.1.0。使用以下命令,您可以安裝特定版本的 Node.js:
$ asdf install nodejs latest
要檢查兩者在您的系統中是否可用,請使用以下命令:
$ asdf install nodejs 20.0.0
要選擇要使用的 Node.js 版本,請使用以下指令:
$ asdf shim-versions node nodejs 20.0.0 nodejs 23.1.0
asdf 透過使用以下格式填入名為[.tool-versions](https://asdf-vm.com/manage/configuration.html#tool-versions) 的檔案來處理工具的各種版本:
$ asdf global nodejs 20.0.0 $ node --version v20.0.0 $ asdf global nodejs 23.1.0 $ node --version v23.1.0
asdf 使用命令自動操作 .tool-versions 檔案來指定您打算使用的給定版本,就像我們上面對 Node.js 版本 20.0.0 所做的那樣。根據全域、shell 和本機參數,我們會將工具的版本新增到特定的 .tool-versions 檔案中,這會對您的環境產生不同的影響。下面解釋一下安裝 Node.js 20.0.0 版本時參數的影響:
ruby 2.5.3 nodejs 10.15.0
透過第一個指令,我們告訴 asdf 在主目錄中使用版本 20.0.0,並且 node --version 確認版本。然後,我們建立一個名為 test 的目錄。在測試中,我們執行 asdf,為 Node 指定不同的版本(版本 23.1.0),並且節點 --version 再次確認我們正在使用版本 23.1.0。最後回到主目錄,可以看到本地的Node.js版本還是20.0.0。
現在我們的系統上已經有了 asdf,讓我們了解什麼是 shim 以及為什麼它在使用 asdf 時很重要。
在電腦科學中,墊片是一種在不同版本之間透明地重定向命令(例如,庫方法呼叫)的方法。這裡的關鍵是「透明」這個詞。 asdf 的整個想法是允許使用者以透明的方式更改當您編寫節點或 python 或任何其他套件時真正調用的內容。使用者不斷輸入 node 或 python,但 asdf 已根據 .tool-versions 檔案中寫入的內容設定了通往正確版本的不同路徑(墊片)。
外掛程式只是一組聰明的 shell 腳本,讓 asdf 選擇特定指令的正確版本(例如,檢查 Node.js 外掛程式)。 bin目錄下的指令只是實作了當你使用Node.js外掛安裝新版本、選擇特定版本使用等時asdf必須執行的內容
安裝 mise 的過程比 asdf 更容易,因為您不需要複製 git 儲存庫:
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
啟動指南非常簡單;執行上面的命令並重新啟動 shell 後,您將能夠執行以下命令:
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
這將顯示您的安裝狀態。安裝 mise 後,您可能需要使用 [mise activate](https://mise.jdx.dev/cli/activate.html) 命令啟動它。
此時,mise 指令可用於最常見的任務:安裝特定版本的框架以使其在系統中全域可用:
$ asdf install nodejs latest
我們從節點可執行檔案不在系統中的情況開始。使用 mise 命令,我們在全域安裝特定的節點版本以使其可用。若要驗證目前安裝的工具的版本,可以使用以下命令:
$ asdf install nodejs 20.0.0
在上面的指令中,您可以看到上面框中安裝的節點工具以及Python版本。
mise 框架使用相同的 asdf 機制來處理整個系統和特定目錄內的工具的不同配置。 asdf 中 .tool-versions 檔案的作用由 mise.toml 檔案扮演,該檔案將收集配置。
在mise中,沒有類似asdf插件的概念,這是一件好事,因為在asdf中,安裝特定版本的工具- 比方說node@20.0.0 - 是一個兩步驟過程(首先安裝Node. js 插件,然後安裝特定版本的Node)。在mise中,您只需解決所需工具的單一版本,mise將在幕後為您處理配置它的所有繁重工作。在下面的兩個方塊中,您可以看到 asdf 指令如何轉換為 mise:
$ asdf shim-versions node nodejs 20.0.0 nodejs 23.1.0
在mise中,這一切都可以透過安裝外掛程式和運行時並設定版本的步驟來完成:
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
mise 的語法糖優雅地解決了 asdf 的冗長問題。儘管如此,mise 在處理不同版本的方式上還是有所不同的,這對整個體驗有著更廣泛的影響。在下圖中,我們描述了在 asdf 工作的環境中執行節點命令時發生的情況:
這個過程當然會影響執行指令所需的時間。另一方面,mise 透過利用另一種機制解決了根據配置選擇正確工具的相同問題:PATH 變量,這是作業系統執行命令的本機機制。
效能與不使用 mise 運行指令(例如,node)相同。出於好奇,mise 的工作方式與 asdf 不同:mise 追蹤目錄的每次更改,以便當使用者更改目錄時,mise 呼叫內部掛鉤來更新 PATH 變數。這個鉤子非常高效,因為它是用 Rust 編寫的,並且會動態設定 PATH 變數來配置您的環境。
asdf 和 mise 都可以有效管理多個工具版本,每個版本都有獨特的機制。由於其 PATH hook 機制,mise 在效率方面表現出色,而 asdf 提供了更廣泛的工具相容性,但其 shim 機制的性能權衡。 mise 與 asdf 插件的兼容性彌補了工具之間的差距。
無論優先考慮速度或選擇,這兩種工具都使開發人員能夠輕鬆管理其環境,為各種軟體包和工具提供繁榮的生態系統。
NPM:
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
腳本標籤:
$ asdf install nodejs latest
3.(可選)安裝插件以與您的堆疊進行更深入的整合:
現在就開始。
以上是mise 與 asdf 用於 JavaScript 專案環境管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!