跳至主要內容

逐步操作

提示

你可能聽過 Yarn Plug'n'Play,並擔心你的專案還不支援。別擔心!

這個遷移會讓你保留你的 node_modules 資料夾。只有在我們完成後,你才需要決定是否要花時間遷移到 Yarn PnP。無論你是否執行此操作或留在 node_modules,遷移到 Yarn Modern 都會帶來 許多好處

資訊

請注意,這些指令只需要執行一次即可套用於整個專案,而且只要他們已拉取分支,且已啟用 Corepack,就會自動對所有貢獻者生效。

移轉步驟

  1. 請確認您使用的是 Node 18 以上版本
  2. 執行 corepack enable 來啟動 Corepack
  3. 前往您的專案目錄
  4. 執行 yarn set version berry
  5. 將您的 .npmrc.yarnrc 檔案轉換成 .yarnrc.yml(詳細資訊 在此
  6. 執行 yarn install 來移轉鎖定檔
  7. 提交所有變更

太好了,您現在應該擁有可運作的 Yarn 安裝!某些項目可能仍需要在您的 CI 腳本中進行一些調整(例如 任意 pre/post 腳本 的棄用,或將 --frozen-lockfile 重新命名為 --immutable),但至少我們有一個可運作的專案。

重大變更

將您的設定更新為新的設定

Modern 使用的設定檔樣式與 Classic 不同。雖然鎖定檔大多是看不出來的(因為我們會在執行時將它們轉換),但如果您依賴 .npmrc.yarnrc 檔案,可能會造成問題。

  • Yarn Modern 現在使用 .yarnrc.yml。任何其他檔案現在都會被忽略,包括 .npmrc
  • 從新的檔案副檔名可以看出,Yarnrc 檔案現在要寫成 YAML

大多數設定金鑰也已重新命名,以更為一致。可用的設定完整清單可以在 .yarnrc.yml 專屬文件 中找到,但以下是一些重要的設定

明確呼叫 prepost 腳本

針對 生命週期腳本 的運作方式進行了一些變更,以釐清其目的並移除令人困惑的行為。其中一項變更是不再支援自訂 prepost 腳本。因此,請改寫

{
"scripts": {
"prestart": "do-something",
"start": "http-server"
}
}

{
"scripts": {
"prestart": "do-something",
"start": "yarn prestart && http-server"
}
}
備註

這只適用於使用者腳本,例如 start 及其相關腳本。使用 preinstallinstallpostinstall 仍然沒問題。請參閱 腳本文件 以取得更多資訊。

使用 yarn dlx 取代 yarn global

Yarn 專注於專案管理,而管理系統範圍的套件被認為超出我們的範疇。因此,yarn global 已被移除,需要由 yarn dlx 取代,以執行一次性指令碼。

請勿使用 bundleDependencies

bundleDependencies 欄位(或 bundledDependencies)是過去的產物,用於定義一組套件,這些套件將以原樣儲存在套件封存檔、node_modules 及所有內容中。此功能有許多問題

  • 它使用 node_modules,而這在 Plug'n'Play 安裝中不存在。
  • 它編碼套件內的提升,混淆其他套件的提升。

那麼如何替換它們?有不同的方式

  • 如果您需要修正套件,請直接分岔或透過 file: 協定 參照它(即使是傳遞依賴項使用此協定也完全沒問題)。portal:patch: 協定也是選項,儘管它們僅對 Yarn 使用者有效。

  • 如果您需要將套件作為獨立套件(無依賴項)發送給客戶,請使用 Esbuild、Webpack、Rollup 或類似工具自行套件化。

nmHoistingLimits 取代 nohoist

Yarn Classic 中的 nohoist 設定是為 React Native 建立的,以支援工作區,但其運作方式(透過 glob 模式)會導致許多錯誤和混淆,沒有人真正確定需要設定哪些模式。因此,我們簡化了此功能,僅支援三個已識別的模式。

如果您使用 nohoist,我們建議您從清單設定中移除它,並改在 .yarnrc.yml 檔案中設定 nmHoistingLimits

nmHoistingLimits: workspaces

CLI 變更

已重新命名的命令

Yarn Classic (1.x)Yarn Modern
yarn audityarn npm audit
yarn createyarn dlx create-NAME
yarn globalyarn dlx (了解更多)
yarn infoyarn npm info
yarn listyarn info -AR (--json?)
yarn loginyarn npm login
yarn logoutyarn npm logout
yarn outdatedyarn upgrade-interactive (了解更多)
yarn publishyarn npm publish
yarn upgradeyarn up (注意:會更新所有 workspace)
yarn install --productionyarn workspaces focus --all --production

已移除的指令

Yarn Classic (1.x)
注意事項
yarn check快取完整性現在會在一般安裝時檢查 - 了解更多
yarn import先導入 Classic,再轉移到 Yarn Modern
yarn licenses插件的完美使用案例 - 了解更多
yarn versions使用 yarn --versionnode -p process.versions

尚未實作

這些功能只是尚未實作。歡迎協助!

Yarn Classic (1.x)
注意事項
yarn owner最終會以
yarn npm owner
的形式提供
yarn team最終會以
yarn npm team
的形式提供