逐步操作
你可能聽過 Yarn Plug'n'Play,並擔心你的專案還不支援。別擔心!
這個遷移會讓你保留你的 node_modules
資料夾。只有在我們完成後,你才需要決定是否要花時間遷移到 Yarn PnP。無論你是否執行此操作或留在 node_modules
,遷移到 Yarn Modern 都會帶來 許多好處。
請注意,這些指令只需要執行一次即可套用於整個專案,而且只要他們已拉取分支,且已啟用 Corepack,就會自動對所有貢獻者生效。
移轉步驟
- 請確認您使用的是 Node 18 以上版本
- 執行
corepack enable
來啟動 Corepack - 前往您的專案目錄
- 執行
yarn set version berry
- 將您的
.npmrc
和.yarnrc
檔案轉換成.yarnrc.yml
(詳細資訊 在此) - 執行
yarn install
來移轉鎖定檔 - 提交所有變更
太好了,您現在應該擁有可運作的 Yarn 安裝!某些項目可能仍需要在您的 CI 腳本中進行一些調整(例如 任意 pre/post
腳本 的棄用,或將 --frozen-lockfile
重新命名為 --immutable
),但至少我們有一個可運作的專案。
重大變更
將您的設定更新為新的設定
Modern 使用的設定檔樣式與 Classic 不同。雖然鎖定檔大多是看不出來的(因為我們會在執行時將它們轉換),但如果您依賴 .npmrc
或 .yarnrc
檔案,可能會造成問題。
- Yarn Modern 現在使用
.yarnrc.yml
。任何其他檔案現在都會被忽略,包括.npmrc
。 - 從新的檔案副檔名可以看出,Yarnrc 檔案現在要寫成 YAML。
大多數設定金鑰也已重新命名,以更為一致。可用的設定完整清單可以在 .yarnrc.yml
專屬文件 中找到,但以下是一些重要的設定
- 自訂登錄現在透過
npmRegistryServer
設定。 - 登錄驗證權杖現在透過
npmAuthToken
設定。
明確呼叫 pre
和 post
腳本
針對 生命週期腳本 的運作方式進行了一些變更,以釐清其目的並移除令人困惑的行為。其中一項變更是不再支援自訂 pre
和 post
腳本。因此,請改寫
{
"scripts": {
"prestart": "do-something",
"start": "http-server"
}
}
成
{
"scripts": {
"prestart": "do-something",
"start": "yarn prestart && http-server"
}
}
這只適用於使用者腳本,例如 start
及其相關腳本。使用 preinstall
、install
和 postinstall
仍然沒問題。請參閱 腳本文件 以取得更多資訊。
使用 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 audit | yarn npm audit |
yarn create | yarn dlx create-NAME |
yarn global | yarn dlx (了解更多) |
yarn info | yarn npm info |
yarn list | yarn info -AR (--json ?) |
yarn login | yarn npm login |
yarn logout | yarn npm logout |
yarn outdated | yarn upgrade-interactive (了解更多) |
yarn publish | yarn npm publish |
yarn upgrade | yarn up (注意:會更新所有 workspace) |
yarn install --production | yarn workspaces focus --all --production |
已移除的指令
Yarn Classic (1.x) | 注意事項 |
---|---|
yarn check | 快取完整性現在會在一般安裝時檢查 - 了解更多 |
yarn import | 先導入 Classic,再轉移到 Yarn Modern |
yarn licenses | 插件的完美使用案例 - 了解更多 |
yarn versions | 使用 yarn --version 和 node -p process.versions |
尚未實作
這些功能只是尚未實作。歡迎協助!
Yarn Classic (1.x) | 注意事項 |
---|---|
yarn owner | 最終會以 的形式提供 |
yarn team | 最終會以 的形式提供 |