Corepack#

穩定性:1 - 實驗性

Corepack 是一個實驗性工具,用於協助管理套件管理員版本。它公開每個 受支援套件管理員 的二進位代理,當呼叫時,它會識別為目前專案設定的任何套件管理員,視需要下載,最後執行它。

儘管 Corepack 與 Node.js 的預設安裝一起發行,但由 Corepack 管理的套件管理員並非 Node.js 發行的一部分,而且

  • 首次使用時,Corepack 會從網路下載最新版本。
  • 任何必要的更新(與安全性漏洞或其他相關)都不在 Node.js 專案的範圍內。如有必要,最終使用者必須找出如何自行更新。

此功能簡化了兩個核心工作流程

  • 它簡化了新貢獻者的加入,因為他們不再需要遵循特定於系統的安裝程序,才能擁有您希望他們擁有的套件管理員。

  • 它允許您確保團隊中的每個人都將使用您希望他們使用的套件管理員版本,而無需每次需要更新時手動同步。

工作流程#

啟用功能#

由於 Corepack 目前仍處於實驗階段,因此目前需要明確啟用才能發揮作用。為此,請執行 corepack enable,這會在您的環境中設定與 node 二進位檔相鄰的符號連結(如有必要,也會覆寫現有的符號連結)。

從此以後,任何呼叫 受支援的二進位檔 都會在沒有進一步設定的情況下運作。如果您遇到問題,請執行 corepack disable 從您的系統中移除代理(並考慮在 Corepack 儲存庫 中開啟問題,讓我們知道)。

設定套件#

Corepack 代理會在您目前的目錄階層中尋找最接近的 package.json 檔案,以擷取其 "packageManager" 屬性。

如果值對應到 受支援的套件管理員,Corepack 會確保所有呼叫相關二進位檔都會針對請求的版本執行,並在需要時依需求下載,如果無法成功擷取,則會中止。

您可以使用 corepack use 要求 Corepack 更新您本地的 package.json,以使用您選擇的套件管理員

corepack use [email protected] # sets the latest 7.x version in the package.json
corepack use yarn@* # sets the latest version in the package.json 

升級全球版本#

在現有專案外執行時(例如執行 yarn init),Corepack 預設會使用預先定義的版本,大致對應到每個工具的最新穩定版本。這些版本可以透過執行 corepack install 指令,以及您希望設定的套件管理員版本來覆寫

corepack install --global [email protected] 

或者,可以使用標籤或範圍

corepack install --global pnpm@*
corepack install --global yarn@stable 

離線工作流程#

許多生產環境沒有網路存取權限。由於 Corepack 通常會直接從其註冊表下載套件管理員版本,因此可能會與此類環境衝突。為避免發生這種情況,請在您仍有網路存取權限時(通常在您準備部署映像的同時)呼叫 corepack pack 指令。這將確保即使沒有網路存取權限,也能使用所需的套件管理員。

pack 指令有 各種旗標。請參閱詳細的 Corepack 文件 以取得更多資訊。

支援的套件管理員#

下列二進位檔是透過 Corepack 提供的

套件管理員二進位檔名稱
Yarnyarnyarnpkg
pnpmpnpmpnpx

常見問題#

Corepack 如何與 npm 互動?#

雖然 Corepack 可以像支援其他套件管理員一樣支援 npm,但預設情況下並未啟用其 shim。這會產生一些後果

  • 由於 Corepack 無法攔截,因此始終可以在設定為使用其他套件管理員的專案中執行 npm 指令。

  • 儘管 npm"packageManager" 屬性中的一個有效選項,但由於缺乏 shim,將會使用全域 npm。

執行 npm install -g yarn 無效#

npm 會在執行全域安裝時防止意外覆寫 Corepack 二進位檔。若要避免此問題,請考慮下列選項之一

  • 不要執行此命令;Corepack 會提供套件管理員二進位檔,並確保隨時都能使用所要求的版本,因此不需要明確安裝套件管理員。

  • --force 旗標新增至 npm install;這會告訴 npm 覆寫二進位檔無妨,但你會在此過程中清除 Corepack 二進位檔。(執行 corepack enable 以將它們加回去。)