跳至主要內容

變更紀錄

提示

Yarn 現在接受贊助!請參閱我們的 OpenCollectiveGitHub Sponsors 頁面以取得更多詳細資料。

Master

資訊

master 中的功能可以在專案中執行 yarn set version from sources 來試用。

4.1.0

  • 調整 yarn workspaces foreach 中的 -,--verbose-v 現在只會列印前綴,-vv 會列印時間。

  • 在沒有指定指令碼名稱時,新增 yarn run--json 選項

  • 修正 node-modules 連結器 link: 相依套件錯誤地視為內部工作區,當它們指向工作區的父資料夾時

  • 修正錯誤的「找不到候選項目」錯誤

  • 修正使用 nodeLinker: pnpm 時缺少可執行權限

  • 修正套件錯誤地標記為可選

  • 修正由於不受控的 git 合併而導致快取金鑰損毀

  • 修正 yarn version apply --all --dry-run 進行意外變更

  • 修正遠端註冊中心為 Verdaccio 時的 yarn npm login

4.0.1

  • 修正當內部工作區依賴外部工作區時,node-modules 連結器的符號連結建立
  • 修正終端機過大時的進度條
  • 修正 GitHub Actions 中的 Docker 內執行 Yarn 時的崩潰
  • 修正未套用於不建議使用的 yarn npm audit --ignore NUM
  • 修正未列印正確輸出格式的 yarn npm audit --json
  • 修正 @yarnpkg/core 中不正確的類型匯出
  • 重新實作 yarn explain peer-requirements 指令

4.0.0

重大變更

  • 由於 Node.js 16 現已結束生命週期,我們停止支援低於 18.12 的 Node.js 版本。

  • 一些重要的預設值已變更

    • yarn inityarn set version 會優先使用 packageManager 而不是 yarnPath(當它們在環境變數中偵測到 COREPACK_ROOT 時)。

    • yarn init 預設不再使用零安裝。你仍然可以啟用它,但這應該可以更容易開始一個專案,而無需事後重寫組態。

      • 因此,enableGlobalCache 現在預設為 true。如果你的專案使用零安裝,則你在升級到 4.0 後執行的第一個 yarn install 會自動在你的本機 .yarnrc.yml 中設定 enableGlobalCache: false
    • yarn workspaces foreach 現在需要明確指定 --all--recursive--since--worktree 之一;先前的預設值為 --worktree,但這很少是使用者預期的。

    • compressionLevel 現在預設為 0,而非 mixed。已證明在安裝時速度顯著提升,而大小影響足夠合理,因此變更預設值。請注意,即使您使用零安裝,您仍能受益:根據我們的測試,Git 實際上更容易處理零壓縮(您可以使用範例自行查看,使用 compressionLevel: 0compressionLevel: mixed)。

      • 為了避免升級過於中斷,Yarn 會在您從 3.6 遷移到 4.0 後,第一次執行 yarn install 時檢查是否啟用零安裝。如果您啟用,它會自動在您的 .yarnrc.yml 檔案中設定舊預設值 (compressionLevel: mixed)。然後,當您準備好實際變更壓縮設定時,可以隨時將其移除。
  • 所有官方 Yarn 外掛現在都預設包含在我們提供的套件中。您不再需要為官方外掛執行 yarn plugin import(當然,您仍然需要為第三方外掛執行)。

    • 這不會對我們提供的 plugin API 做任何變更,它將持續獲得維護。
    • Yarn 仍具有模組化架構,並使用與貢獻外掛完全相同的 API;變更的只有我們如何散布我們自己的功能。
  • Yarn 在安裝期間的 UI 已大幅改善

    • 現在會明確回報從鎖定檔中新增和移除的套件。
    • 專案快取大小的波動現在會回報為單一行。
    • 已移除不可執行的警告(node-gyp 和傳遞性對等相依性錯誤)。
    • 略過的建置現在只會在初始安裝和手動 yarn rebuild 呼叫期間回報。
    • Yarn 版本現在會在安裝時顯示,以協助我們調查問題,當回報為螢幕截圖時 會發生這種情況
    • 不建議使用的檢查已移至 yarn npm audit
  • 已重新命名或移除一些設定

    • caFilePath 現在為 httpsCaFilePath
    • 已移除 preferAggregateCacheInfo(它現在總是開啟)
    • 已移除 pnpDataPath,以遵守我們的 PnP 規格。為了保持一致性,所有 PnP 檔案現在都將硬編碼為單一值,以便第三方工具可以實作 PnP 規格,而不用依賴 Yarn 組態。
  • yarn npm audit 指令已重新實作

    • 稽核登錄現在必須實作 /-/npm/v1/security/advisories/bulk 端點。
    • npmAuditRegistry 可用於暫時將稽核查詢路由到 npm 登錄。
    • 預設情況下,現在會回傳廢棄項目。若要將其靜音,請使用 yarn npm audit ! --no-deprecations
  • 某些舊版層級已終止

    • 外掛程式無法再存取 Clipanion 2 API(升級至 Clipanion 3
    • 外掛程式無法再存取 Yup 的內部副本(改用 Typanion
    • Yarn 在遷移時不再移除舊的 Yarn 2.x .pnp.js 檔案。
    • 已移除 yarn init--assume-fresh-project 旗標。

API 變更

下列變更只會影響撰寫 Yarn 外掛程式的人員

  • ZipFSZipOpenFS 類別已從 @yarnpkg/fslib 移至 @yarnpkg/libzip。它們不再需要或接受 libzip 參數。

    • 現在會在 Node.js 端讀取 zip 檔案以提升效能;因此,ZipFS 不再需要 openZIP_CREATEZIP_TRUNCATE 繫結,且這些繫結也已移除。
  • Resolver#resolve 回傳的 dependencies 欄位現在必須是 Configuration#normalizeDependencyMap 呼叫的結果。此變更是由於預設通訊協定(例如 npm:)注入描述符的方式重構所致。先前的實作導致各種描述符從未正規化,這使得難以得知每個函式應預期的描述符為何。

    • 類似地,Resolve#getResolutionDependencies 回傳的描述符現在預期是 Configuration#normalizeDependency 呼叫的結果。

    • 請注意,這只適用於 dependencies 欄位;peerDependencies 欄位保持不變,因為它只能包含不帶任何通訊協定的 semver 範圍(workspace: 除外,但這與這裡無關)。

  • Resolve#getResolutionDependencies 函式現在必須回傳一個包含任意字串金鑰和描述符值的物件(而非具有 DescriptorHash 金鑰的映射)。這些描述符將會解析並指定至與初始物件相同的金鑰。此變更允許解析器包裝來自其他解析器的解析依賴項,這在以前無法做到,因為這會導致金鑰變更。

  • @yarnpkg/pnp 中的 generateLoader 函式不再產生 $$SETUP_STATE 函式,現在它必須存在於傳遞至函式的 loader 中。

  • @yarnpkg/coreInstallergetCustomDataKey 函式已移至 Linker

  • 現在需要 renderFormoptions 參數,以強制始終指定自訂串流。

  • npmConfigUtils.getAuditRegistry 不再將 Manifest 作為其第一個參數。

  • 已移除 FetchOptions.skipIntegrityCheck 選項。請改用 FetchOptions.cacheOptions.skipIntegrityCheck

  • MapConfigurationValue 已移除。請改用 miscUtils.ToMapValue

  • Manifest.isManifestFieldCompatibleManifest.prototype.isCompatibleWith{OS,CPU} 已移除。請改用 Manifest.prototype.getConditionsstructUtils.isPackageCompatible

  • versionUtils.{fetchBase,fetchRoot,fetchChangedFiles} 已從 @yarnpkg/plugin-version 移至 @yarnpkg/plugin-git。請改用 gitUtils.{fetchBase,fetchRoot,fetchChangedFiles}

  • 基於一致性考量

    • Link{Resolver,Fetcher} 已重新命名為 Portal{Resolver,Fetcher}
    • RawLink{Resolver,Fetcher} 已重新命名為 Link{Resolver,Fetcher}
  • FakeFS 類別現在需要實作 lutimes{Sync,Promise}

  • workspace.dependencies 已移除。請改用 workspace.anchoredPackage.dependencies

  • Installer 類別現在必須傳回 BuildRequest 結構,而非 BuildDirective[]。這可讓您標記建置必須略過,以及略過的原因。

  • startCacheReport 已移除,現在是 fetchEverything 產生的輸出的其中一部分。

  • forgettableNamesforgettableBufferSize 已移除(使用它們的唯一訊息已移除,使可遺忘的記錄實作變得過時)。

  • workspace.locator 已移除。您可以改用

    • workspace.anchoredLocator 來取得整個依賴關係樹中使用的定位器。
    • workspace.manifest.version 來取得工作區版本。
  • configuration.{packageExtensions,refreshPackageExtensions} 已移除。請改用 configuration.getPackageExtensions

  • configuration.normalizePackage 現在需要 packageExtensions 選項。

  • ProjectLookup 已移除。Configuration.findConfiguration.findProjectCwd 現在都總是執行鎖定檔查詢。

安裝

  • Yarn 現在快取 npm 版本資訊,可加快解析步驟並減少網路資料使用量。
  • pnpm 連結器避免建立會導致檔案系統迴圈的符號連結,方法是將它們移到目錄結構的上層。
  • pnpm 連結器不再報告重複的「不相容虛擬」警告。

功能

  • enableOfflineMode 是新的設定,設定後會指示 Yarn 只使用已儲存在本機電腦上的資訊和封存檔,而不是從註冊表下載。這在網路受限的環境(火車、飛機等)下執行本地開發時很有用。
  • yarn run bin 現在會在產生程序時注入在 .env.yarn 中定義的環境變數。這可以使用 injectEnvironmentFiles 變數進行設定。
  • yarn workspaces foreach 現在會在互動式終端中自動啟用 yarn workspaces foreach ! --verbose 旗標。
  • 約束現在可以用 JavaScript 編寫。請參閱更新的說明文件以取得更多資訊。

錯誤修正

  • yarn dlx 不會再報告錯誤正面的 UNUSED_PACKAGE_EXTENSION 警告
  • yarn workspace 現在會將 $INIT_CWD 設定為 CLI 工作目錄,而不是工作區根目錄。

Shell

  • 內建 Shell 現在支援僅有空白字元的命令。

相容性

  • 修補的檔案系統現在支援 FileHandle.readLines
  • PnP 現在會在監控模式中報告遺失的檔案。

3.4.1

  • 修正 yarn init 中意外的回溯錯誤。

3.4.0

Node.js 相等性

  • PnP 現在支援 Node --conditions 旗標。
  • PnP 現在在 Node 18 上支援 Node --watch 旗標(以前僅在 Node 19 上支援)。

錯誤修正

  • PnP API 模組 (pnpapi) 現在可以從 ESM 模組匯入。
  • ZipFS.prototype.getBufferAndClose 對於在寫入後解除連結而產生的空檔案不會產生錯誤。
  • 修正後安裝指令碼相互依賴的各種問題。
  • yarn workspaces foreach 中移除訊息前綴 (YN0000)。

相容性

  • 更新 PnP 相容性層以支援 TypeScript v5.0.0-beta。

3.3.0

安裝

  • node-modules 連結器避免建立循環符號連結
  • node-modules 連結器不再在別名套件內建立重複的副本
  • 當同一個版本的套件在根工作區和另一個工作區中重複時,node-modules 連結器會正確地找到二進位檔
  • 改善了 hardlinks-global node-modules 連結器模式的效能,提升了 1.5 倍

相容性

  • 更新了 TypeScript v4.9.2-rc 的 PnP 相容性層。

3.2.4

相容性

  • 修補後的檔案系統現在支援 fchown。
  • PnP 現在處理私人匯入對應。
  • 更新了 TypeScript v4.8.4 和 v4.9.1-beta 的 PnP 相容性層。
  • PnP 現在會在監控模式下報告已載入的模組。

3.2.3

錯誤修正

  • 當啟用 Corepack 時,Yarn 現在會使用目前的 CLI 來準備外部 Yarn 經典專案,這與停用 Corepack 時的行為相符。

相容性

  • 更新了 TypeScript 4.8.1-rc 的 PnP 相容性層
  • ESM 載入器現在支援未標記的 JSON 模組。

3.2.2

相容性

  • 修補後的檔案系統現在支援 ftruncate
  • 修補後的檔案系統現在支援 fchmod
  • 修補後的檔案系統現在支援 throwIfNoEntry
  • PnP 檔案系統現在處理大部分的 FileHandle 方法
  • 更新了 TypeScript 4.8 Beta 的 PnP 相容性層
  • npm_package_json 環境變數現在由 Yarn 設定。

3.2.1

安裝

  • node-modules 連結器處於啟用狀態時,pnpm 連結器不再嘗試移除 node_modules 目錄
  • 如果入口依賴項指向具有多個相互依賴工作區的外部專案,node-modules 連結器不再會失敗
  • node-modules 連結器已收到各種改進:
    • 對別名依賴項套用提升演算法
    • 重新安裝使用者從 node_modules 中移除目錄的模組
    • 改善入口提升
    • 支援 supportedArchitectures

錯誤修正

  • PnP ESM 載入器現在可以處理符號連結的無副檔名進入點。

3.2.0

已在核心進行各種改善以提升效能。此外

指令

  • yarn workspaces foreach run 指令現在可以執行二進位檔。
  • yarn npm info 指令現在支援顯示套件標記版本資訊(例如 yarn npm info vue@next)。
  • 已新增 yarn explain 指令。它可用於說明錯誤代碼或列出所有可用的錯誤代碼。
    • 例如,嘗試執行 yarn explain YN0002
  • yarn npm publish 指令現在接受新的 --otp 選項,以從 CLI 設定一次性密碼。
    • 當查詢因無效 OTP 而失敗時,也會顯示更好的錯誤訊息。
  • yarn upgrade-interactive 現在有更佳的分頁功能:
    • Yarn 會顯示視窗中可以容納的建議數量(而非固定大小的清單)。
    • 適合視窗的建議會在前台擷取,並逐一載入。
    • 不適合的建議會在背景擷取,並分批載入以增加回應速度並減少輸入延遲。
    • 最重要的是,您不必等到所有建議都擷取完畢(在大型單一儲存庫中,以前需要花費很長的時間)才能開始瀏覽清單。

安裝

  • node-modules 連結器現在容忍 node_modules 是符號連結,並且不會重新建立它。
  • 除了 cpuarch 欄位,Yarn 現在支援新的 libc 欄位,它可以與 optionalDependencies 搭配使用,以避免下載已連結到不相容標準函式庫的套件(我們目前支援兩個值:glibcmusl)。
  • pnpm 連結器已收到各種改善:
    • 如果 node_modules/.storenode_modules 資料夾為空,它現在會將它們移除。
    • 它現在支援執行軟連結的二進位檔。
    • 現在,它將為不依賴其他版本的套件建立自我參考。
    • 現在,如果範圍資料夾(例如 node_modules/@yarnpkg)為空,或移除範圍依賴項後,它將移除範圍資料夾。
  • 所有內嵌資料的 .pnp.cjs 檔案現在會將資料儲存在 JSON 字串文字,而非物件文字中,以改善啟動效能

相容性

  • 現在,shell 將反斜線視為與 Bash 相同(因此大多數情況下會忽略它們)。
    • 這可能是一個重大變更,但舊行為會導致一些套件產生可攜性問題,因此我們必須進行此變更(特別是因為可攜式 shell 的目的是協助可攜性)。
  • 現在,shell 支援 ${FOO:+}
  • 現在,PnP 檔案系統使用選項處理 readreadSync
  • 現在,PnP 檔案系統使用正斜線處理 UNC 路徑。
  • 現在,PnP 檔案系統會在由 createReadStream() 建立並從 zip 檔案取得的串流上設定適當的 path 屬性。
  • 現在,PnP 執行時期會在嘗試需要 ES 模組時擲出 ERR_REQUIRE_ESM 錯誤,與 Node.js 預設行為相符。
  • 更新 TypeScript 4.6 Beta 的 PnP 相容性層(一旦 4.6 進入穩定版,我們可能需要發布另一個修補程式更新)。

錯誤修正

  • 現在,@yarnpkg/pnpify 會正確跳脫路徑。
  • 現在,ESM 載入器已啟用,與進入點模組類型無關,這修正了在進入點也是 commonjs 時,commonjs 模組中動態匯入的支援。
  • 現在,ESM 載入器能夠解析帶有搜尋參數的相對匯入。
  • 現在,Yarn 設定中的 node 欄位會在 npm_config_user_agent 中包含開頭的 v
  • 現在,Yarn 能夠從損毀的安裝狀態中復原。
  • 現在,Yarn 能夠移轉包含非傳統 tarball URL 的傳統鎖定檔。
  • nm 連結器會在提升其依賴項後提升入口網站。
  • 修正了由別名套件和同儕依賴項之間的錯誤互動所造成的崩潰。
  • 如果 platform 未設定為 Node,ESBuild 外掛程式將不再允許存取 Node.js 內建函式。
  • 現在可以解析帶有建置資料的 SemVer 範圍。
  • 現在將使用與環境變數組態設定相同的機制來剖析 YARN_IGNORE_NODE 環境變數(亦即將接受 1/0true/false

ZipFS 擴充功能

  • 現在您可以透過右按一下工作區來卸載 zip 資料夾。

其他功能

  • 已改善 Git 錯誤的回報。
  • 解析步驟現在有進度指標。
  • 現在會抑制 Node.js 發出的實驗性 ESM 載入器警告。
  • 現在可以使用私人金鑰和憑證來驗證私人登錄。
  • 新的 wrapNetworkRequest 掛勾現在讓您可以包裝網路要求(例如記錄它們)。

3.1.1

  • 更新 TypeScript 4.5 的 PnP 相容性層

3.1.0

指令

  • yarn workspaces listyarn workspaces foreach 指令現在都支援新的 --since 選項,讓您可以依變更來篩選工作區清單(只有自指定提交以來已變更的工作區會進行反覆運算)。此功能仍有些實驗性質,特別是在與 -R,--recursive 搭配使用時。
  • yarn workspaces foreach 指令現在會處理包含 : 的指令碼只有在確實存在於一個工作區時才會變成全域性的這個事實。
  • yarn workspaces foreach 指令現在支援 --jobs 1--jobs unlimited
  • yarn init -2 指令現在會將 packageManager 欄位新增到您的專案清單。

設定

  • logFilters 中的 pattern 比對器現在會比對日誌條目的任何部分。

安裝

  • 新的 nodeLinker: pnpm 模式將讓您可以使用 pnpm 安裝策略來安裝套件,其中套件會以扁平方式儲存,並透過符號連結彼此參照。此模式仍有些實驗性質,因此請將您可能發現的錯誤傳送給我們。
  • Yarn 不會再安裝與目前作業系統不符的套件。如果您需要(例如如果您檢查快取),請使用 supportedArchitectures 欄位手動強制執行特定架構的存在。
  • 當全域快取和安裝資料夾保存在不同的裝置上時,nmMode: hardlinks-global 設定現在會自動降級為 nmMode: hardlinks-local,從而讓安裝正常繼續進行。仍會產生警告來解釋此行為。
  • 在使用工作區的情況下,node_modules 連結器會將機會最大化,以只在頂層結束一個 node_modules
  • 已將 nmSelfReferences 設定新增至 nm 連結器,用於控制工作區是否允許需要自己,這會導致建立自參照符號連結。yarn workspaces focus 將不再為已排除的工作區建立自參照符號連結。
  • 如果系統已安裝 npm@>=7.x,Yarn 現在可以從使用 npm 的遠端 git 儲存庫安裝工作區。
  • 提升演算法應會加快安裝時間,改善重複安裝 node_modules 的時間。

其他功能

  • 現在可以使用 workspace:^workspace:~ 參照工作區。發佈時,這些標記會轉換為實際版本(就像以前使用 workspace:* 會發生的一樣),但它們會加上相關的 semver 前綴(分別為 ^~)。
  • 新的 npmAuditRegistry 設定可讓您定義執行稽核時要使用的登錄。如果未設定,我們會退回到目前設定的發佈登錄(我們可能會在 Yarn 4 中變更此行為,改為使用擷取登錄)。

錯誤修正

  • 現在會在提升期間優先考慮 node_modules 安裝的直接入口依賴項,防止間接一般依賴項阻擋直接入口依賴項的情況發生。
  • 現在可以在包含空白的目錄中使用 pnpify 二進位檔。
  • 從來源建立的 CLI 捆綁現在會輸出提交雜湊,而不是樹狀結構雜湊,作為其 --version 字串的一部分。
  • 嵌套工作區會由 node-modules 連結器正確提升。
  • 使用 node-modules 連結器時,不會為匿名工作區建立自參照符號連結,因為它們無法從程式碼中使用。
  • 現在在跨裝置移動檔案時,快取完全是原子性的,而且整體而言更有效率。
  • PnP 修補程式現在會正確擷取對 fs 模組的變更,允許使用者修補它。
  • 使用 PnP 時,即使使用 exportsrequire.resolve('pnpapi') 也會正確處理。
  • 執行會修改鎖定檔的指令後,安裝狀態不再會失效;這應該會在大型單一儲存庫中新增或移除依賴項後立即執行指令(例如 yarn run)時,大幅提升效能。
  • 現在,選擇性同儕依賴項會暗示對應 @types 版本的選擇性同儕依賴項。這與同儕依賴項的行為相符。

相容性

  • Yarn 現在會在偵測到您可能需要時產生一個實驗性的 ESM 載入器。這可以使用 pnpEnableEsmLoader 來停用 (或啟用)。
  • resolve 的 PnP 相容性修補程式將不再將遺失的模組解析為恰好位於發佈者旁邊的同名檔案。
  • 修正 SDK 以考量 VSCode >=1.61 中的重大變更。

3.0.2

  • 更新 TypeScript 修補程式以涵蓋 TypeScript 4.4。
  • 修正 VirtualFS.mapToBase 以保留 . 字元 (之前會將它們轉換為空字串)。

3.0.1

  • 修正 PnP 載入器在使用 readdir 時的一個臨界狀況,其中第二個參數為 null (而非 undefined)。

3.0.0

重大變更

  • 不再支援 Node 10。
  • 外掛程式無法再存取 yup (我們已移轉至 Typanion 作為 Clipanion v3 的一部分)。
    • 若要升級 workspace-tools,請將其從您的 .yarnrc.yml 中移除,升級後再匯入回來。
  • enableImmutableInstalls 現在會在 CI 上預設為 true (我們仍建議在 CLI 上明確使用 --immutable)。
    • 您可以在環境變數中新增 YARN_ENABLE_IMMUTABLE_INSTALLS=false 以重新允許變更。
  • initVersioninitLicense 組態選項已移除。應改用 initFields
  • Yarn 現在會在使用 PnP 時產生 .pnp.cjs 檔案 (而非 .pnp.js),無論清單中的 type 欄位設定為何。
  • 用於消除對等相依性的虛擬資料夾已從 $$virtual 重新命名為 __virtual__
  • 已移除 yarn workspaces foreach-a 別名旗標;請改用 -A,--all,這完全相同。
  • 舊的 PnPify SDK 資料夾 (.vscode/pnpify) 將不再被清除。
  • yarn install--skip-builds 旗標已重新命名為 --mode=skip-build
  • bstatePath 組態選項已移除。建置狀態 (.yarn/build-state.yml) 已移至安裝狀態 (.yarn/install-state.gz)
  • 快取檔案需要重新產生。我們必須變更它們的時間戳記,以考量到 zip 規格中的瑕疵,這會導致一些第三方工具出現問題。
  • @yarnpkg/pnpify 已重構為 3 個套件:
  • @yarnpkg/plugin-node-modules 已重新命名為 @yarnpkg/plugin-nm
  • 我們的 CLI 所支援的 --clipanion=definitions 指令現在會在進入點(而非 .command)上公開定義

API

  • structUtils.requirableIdent 已移除;請改用 structUtils.stringifyIdent,它們完全相同。
  • configuration.format 已移除;請改用 formatUtils.pretty,它們完全相同,但具有類型安全性。
  • httpUtils.Options['json'] 已移除;請改用 httpUtils.Options['jsonResponse'],它們完全相同。
  • PackageExtension['description'] 已移除,請改用 formatUtils.json(packageExtension, formatUtils.Type.PACKAGE_EXTENSION),它們完全相同。
  • Project.generateBuildStateFile 已移除,建置狀態現在位於 Project.storedBuildState
  • Project.tryWorkspaceByDescriptorProject.getWorkspaceByDescriptor 現在與虛擬描述符相符。

安裝

  • 工作區現在會取得自我參考,即使是在 node-modules 連結器之下(就像它已經在 pnp 連結器中運作的那樣)。這表示稱為 foo 的工作區現在可以安全地假設對 require('foo/package.json') 的呼叫將永遠有效,在大部分情況下,這消除了對 絕對別名 的需求。

  • node-modules 連結器現在盡力支援 portal: 協定。此支援附帶兩個重要的限制

    • 如果要存取其相依項,使用此類相依項的專案必須使用 --preserve-symlinks Node 選項來執行。
    • 由於安全性原因,Yarn 安裝永遠不會修改專案外的檔案,因此具有 portal: 的套件的次相依項必須提升到 portal 外部。如果失敗(例如,如果 portal 套件相依於與透過其他套件提升的版本不相容的項目),連結器將產生錯誤並放棄安裝。
  • node-modules 連結器現在可以使用硬連結。新的設定 nmMode: classic | hardlinks-local | hardlinks-global 指定應使用哪個 node_modules 策略

    • classic - 標準 node_modules 配置,沒有硬連結
    • hardlinks-local - 標準 node_modules 配置,僅在專案內使用硬連結
    • hardlinks-global - 標準 node_modules 配置,使用硬連結指向所有使用此選項的專案的全球內容儲存

錯誤修正

  • Yarn 現在有一個適當的 治理模型
  • node-modules 連結器現在會確保產生的安裝配置是終端的,必要時會進行多輪處理。
  • 當工作區依賴另一個列出安裝腳本的工作區時,node-modules 連結器將不再列印有關安裝後腳本的警告。
  • 依賴其自身父項的同儕依賴項現在由 node-modules 連結器正確提升。
  • 透過 ${ENV_VAR} 語法在設定檔中指定時,會正確詮釋布林值。
  • 如果 preinstallinstallpostinstall 中的任何一個失敗,其餘腳本將會略過。
  • git: 協定現在預設擷取 HEAD(而不是硬編碼的 master)。
  • SIGTERM 訊號現在會傳播到子程序。
  • 如果 PnP 連結器的未插入資料夾被移除,它現在會排程重建套件
  • yarn config unset 現在會正確取消設定非巢狀屬性
  • TypeScript SDK 現在
  • 以及許多較小的修正。

設定

  • 已修正各種 initFields 邊界狀況。
  • preferAggregateCacheInfo 旗標現在也會彙總清理報告。
  • 新的 enableMessageNames 旗標可以設定為 false 以從輸出中排除 YNxxxx

指令

  • yarn init 現在甚至可以在現有專案中執行(將建立遺失的檔案)。
  • yarn inityarn set version 會設定 packageManager 欄位。
  • yarn set version 現在會從 Yarn 官方網站下載二進位檔(而不是 GitHub)。
  • yarn set version from sources 現在也會升級內建外掛,除非設定了 --skip-plugins
  • yarn version apply 現在支援新的 --prerelease 旗標,它取代了先前處理預發行版的處理方式。
  • yarn run 在大型專案中啟動的速度應該會大幅提升。
  • yarn workspaces foreach --verbose 現在會列印程序何時開始和結束,即使它們沒有輸出。
  • yarn workspaces foreach 現在支援 --from <glob> 旗標,與 -R 結合使用時,將針對可從「from」glob 存取的工作區。
  • yarn patch-commit 現在可以在同一個 patch 資料夾中使用多次。
  • yarn patch-commit 現在支援新的 -s,--save 旗標,將儲存 patch,而不會只列印它。
  • yarn up 現在支援新的 -R,--recursive 旗標,將升級指定的套件,不論它在哪裡。
  • yarn config unset 是新的指令,將從本機設定檔(或設定 -H 時為 home)中移除設定。
  • yarn exec 已獲得支援,可使用 Yarn 的可攜式 shell 執行 shell 腳本。
  • yarn plugin import 現在可以安裝特定版本的官方外掛程式。
  • yarn plugin import 現在會預設下載與目前 CLI 相容的外掛程式。
  • 已新增 yarn unlink,它會移除先前由 yarn link 設定的解析。

內建 Shell

  • shell 現在支援背景工作,並有色彩編碼的輸出。
  • 現在也支援從檔案描述符進行重新導向。

相容性

  • 現在在 Yarn v1 專案內執行 yarn install 將自動啟用 node-modules 連結器。這應該可以解決人們在遷移過程中遇到的多數問題。我們仍建議為新專案保留預設 PnP,但您可以自行選擇。
  • 已修復的檔案系統現在支援檔案 URL、bigintfstat
  • 現在提供官方 ESBuild 解析器,名稱為 @yarnpkg/esbuild-plugin-pnp。我們使用它來打包 Yarn 本身!
  • PnP 專案現在可以使用 Node exports 欄位,不論 Node 版本為何。
  • PnP 鉤子現在支援 node: 協定(Node 16 中的新功能)
  • Prettier SDK 不再使用 PnPify,因為它是唯一剩下的用途,而且相當具有侵入性;因此,必須在 Prettier 的 plugins 設定屬性中指定 Prettier 外掛程式。
  • 現在可以從 VSCode 中按一下 Zip 終端機連結
  • 無法套用的內建 patch 不會再造成錯誤(它們會發出警告,而會改用原始來源)。
    • 請記住,patch 也是我們團隊的問題,我們這麼做只是因為我們目前沒有其他可用的選項 - 如果你想幫忙,請考慮在 TypeScript 儲存庫中按讚相關的 pull request,或者如果你在 Microsoft 工作,或許可以向隔壁的 TypeScript 團隊提一下,修復這個問題對你有好處。

其他

  • HTTP 錯誤回報已獲得改善,這應有助於你調查登錄檔問題。

2.4.3

yarn set version 2.4.3
  • 更新 TypeScript 修補程式以涵蓋 TypeScript 4.4。

2.4.2

yarn set version 2.4.2
  • 已更新 TypeScript 修補程式,以涵蓋 TypeScript 4.3。

2.4.1

yarn set version 2.4.1

相容性

  • 由於修補程式衝突,無法安裝 TypeScript 4.2 版本。此問題現已修復。此版本僅包含針對 4.2 的特定修正,但從 3.0 開始的未來 Yarn 版本將更能容忍此類情況,且不會造成此類錯誤。

2.4.0

yarn set version 2.4.0

安裝

  • 已重新實作解析管道。我們以前使用多重傳遞方法,在每次傳遞之間執行 SAT 最佳化,但在調查後發現 SAT 最佳化影響很小,而且會增加效能瓶頸。我們現在使用更簡單且更有效率的演算法執行解析。

  • 連結器現在可以定義自訂資料,以在 Yarn 呼叫之間快取。內建連結器現在使用這些新功能快取無法在執行之間變更的套件資訊。實際上,這會轉換為更快速的重複安裝(在執行新增少數新套件(如果有)的安裝時)。

  • packageExtensions 規則未被使用或與原始套件定義重複時,現在會回報警告。

  • 可能會中斷,但這從一開始就是預期的:packageExtensions 欄位不能再用於取代相依項(只能新增遺失的相依項)。建議使用 resolutions 欄位取代現有的相依項。

  • 進度條顯示的頻率較低,這應有助於某些終端的效能。

  • 別名套件不再包含在 node_modules 安裝中

CLI

  • upgrade-interactive 指令現在只會顯示有可用升級的套件的升級建議(而不是全部)。

  • upgrade-interactive 指令已收到使用者介面改善,應能讓它更容易查看。

  • yarn workspaces focus 指令現在只會執行焦點工作區的 postinstall 指令碼。

  • 新的 yarn npm audit 指令讓您能查詢 npm 登錄檔中的稽核資訊。

  • yarn workspaces foreach 指令新增一個標記 -R,--recursive,它會在目前的 workspace 和所有它依賴的 workspace 上執行指令。

  • yarn install 新增一個 --skip-builds 選項,讓您能略過建置腳本,而不會影響 Yarn 產生的成品(與 enableScripts 相反,後者也會停止解除套件安裝,而這些套件原本會因為包含建置腳本而被解除安裝)。

二進制檔案

  • 現在即使您的其他依賴項被回報與您的系統不相容,您也能在使用 node-modules 連結器時執行依賴項二進制檔案。

  • 在 Windows 中,預設會在執行任何檔名包含「install」、「setup」、「update」或「patch」的二進制檔案之前自動要求管理員權限(它認為它們是安裝程式)。我們現在在 Windows 上使用的二進制跳轉器中明確選擇退出此行為。

  • 在 Windows 中,預設會由一個基本的 glob 模式引擎自動展開傳遞給 MinGW 編譯程式碼的參數。我們現在在 Windows 上使用的二進制跳轉器中明確選擇退出此行為。

  • Windows 二進制跳轉器現在會回報正確的結束代碼。

設定

  • 現在可以使用 Yarnrc 環境變數中的空備援(${VAR:-})。

  • 您現在可以使用新的 logFilters 設定將警告轉換為錯誤或資訊,或完全隱藏它們。請注意,我們計畫在下一版大幅改善對等依賴項警告,因此即使您有很多這樣的警告,現在也可能不要將它們靜音。

Shell

  • 某些 shell 錯誤(找不到符合的項目檔案描述符錯誤未繫結變數未繫結參數)現在會變成可復原的錯誤,讓 shell 繼續執行鏈中的下一個指令,而不是硬當機。修正了例如 rm -rf ./inexistentFolder/* || true 的案例。

VSCode ZipFS 擴充功能

  • 現在即使 workspace 不包含 zip 檔案(通常是因為您排除了它們),擴充功能也會啟動。

相容性

  • TypeScript <4 缺少一些修補程式。此問題已修正。

  • 呼叫 fs.exists(undefined) 不會再當機。

  • 現在即使匯入的模組在 workspace 中很深,TypeScript 匯入建議也應該是正確的。

  • TypeScript 在監控模式下(同時使用 -w 和 VSCode 內)現在會在您新增時偵測新的相依性。

  • 某些特定的多相依性樹狀結構設定會在 Plug'n'Play 安裝中獲得更好的支援。

  • 在 VSCode 中使用 ctrl+click 點擊匯入項目時,不會再導引您至虛擬套件(需要 SDK 更新)。

2.3.1

yarn set version 2.3.1

CLI

  • 在 node_modules 連結器中繼承工作區同儕相依性時,考量同儕相依性的預設值

2.3.0

yarn set version 2.3.0

CLI

  • yarn tag 命令組已從 Yarn Classic 移植為 yarn npm tag
  • 執行 yarn info 現在會列印許多有關您的相依性的資訊。有各種選項可調整輸出,包括 --json。外掛程式作者可透過 fetchPackageInfo 鉤子提供他們自己的資訊區段。
  • 執行帶有 -r,--reset 旗標的 yarn stage 現在會取消暫存所有看似與 Yarn 相關的變更。
  • 所有命令現在都會記錄它們的每個選項(執行 yarn add -h 以查看範例)。
  • 發佈註冊表錯誤現在會原樣回報,而不是壓縮成一般錯誤訊息。
  • 現在會在 Windows 上使用原生二進位跳躍器,以避免在呼叫相依性二進位檔時出現 終止批次工作 (Y/N)? 提示。

安裝

PnP API

下列變更僅適用於 pnp 連結器(這是預設安裝策略)

  • pnpapi 模組現在公開一個稱為 getAllLocators 的新函式,讓您存取地圖中所有定位器的清單,而無需橫越相依性樹狀結構。此方法被視為 Yarn 延伸功能,因此如果您計畫在您的程式碼中使用它,您應該檢查它的存在。
  • 當使用入口網站連線到具有同儕相依性的套件時,Yarn 會遺失解析這些同儕相依性所需的資訊。現在它會適當地解析它們,方式與相依性樹狀結構中的所有其他套件相同。

下列變更僅適用於 node-modules 連結器

  • 當對應的相依性被移除時,bin 符號連結現在會從 node_modules/.bin 資料夾中適當地移除。
  • 出現一個稱為 nmHoistingLimits 的新設定。它取代了 Yarn 1 中先前稱為 nohoist 的設定。
  • 現在我們對做出關於提升版面不正確假設的套件較為寬容,首先嘗試在頂層最大化套件曝光。只有在頂層已填滿後,我們才會對剩餘的套件進行重複資料刪除。
  • 修正了同儕相依性中的一些病態案例。特別是,工作區的同儕相依性現在會根據目錄階層,針對它們最近的工作區祖先(而非忽略)來解析。請注意,當使用 node-modules 連結器時,同儕相依性在工作區中本質上是有問題的,而且只有透過使用預設的 Plug'n'Play 連結器才能取得嚴格正確的行為。
  • 現在支援在中斷安裝後執行安裝,且會產生一致的安裝狀態

Shell

  • 新增對 $$$PPID 的支援
  • 修正一些異常的 Glob 問題。

Bug 修復

  • yarn constraints --fix 指令現在會正確地將變更保留在磁碟中。
  • yarn unplug 指令現在會在用於具有對等相依性的套件時運作。
  • yarn stage 指令現在允許在未呼叫 -c,--commit 旗標時分段檔案。
  • 修正使用 FSEvents 時的效能回歸。

其他

  • 使用 yarnPath 設定時移除多餘的子程序。

第三方整合

  • 更新 VSCode SDK 以考量 TypeScript 伺服器通訊協定的變更。
  • 新增幾個內建擴充功能,以改善與未正確列出其相依性的套件的相容性。
  • 更新 TypeScript 修補程式以涵蓋 TypeScript 4.1。

2.2.0

yarn set version 2.2.0

生態系統

  • 套件現在可以在其清單中使用 publishConfig.executableFiles 欄位,以指示哪些檔案應在封裝到檔案庫中後保留可執行旗標。這很重要,因為 Yarn 出於可攜性的原因會在封裝期間從所有檔案中移除可執行旗標(否則 yarn pack 會在 Posix 與 Windows 上執行時產生不同的輸出)。預設會假設列在 bin 欄位中的檔案可執行,因此您不需要在 executableFiles 中明確列出它們。

Bug 修復

  • 只要伺服器仍在傳送資料,就不會再讓要求逾時。
  • yarn pack 會正確包含 main/module/bin 檔案,即使未透過 files 欄位明確參照。
  • 現在可以使用 git+file: 通訊協定擷取本機 git 存放庫。
  • 在特定日期使用新的 Windows 終端時,進度條將會以適當的樣式顯示。
  • Yarn 現在會避免使用已棄用的依賴項版本,除非只有已棄用的版本可供請求的範圍使用。
  • 現在會適當計算建置金鑰,這修正了建置腳本並非總是在應該觸發時觸發的問題。
  • workspace 欄位中的否定 glob 模式現在會正確處理。
  • Yarn 現在允許 workspace: 協定內的相對路徑以 ./ 開頭
  • Yarn 現在會在 yarn addyarn up 期間無法解析請求時顯示實際錯誤
  • 可攜式 shell 現在會支援呼叫沒有參數的 cdexit
  • Yarn 現在會在生命週期腳本失敗時顯示結束代碼
  • Yarn 的可攜式 shell 現在也會在使用 |& 管線時導出 stderr
  • Yarn 的可攜式 shell 現在會尊重清單運算子的左結合性

CLI

  • Yarn 現在會在透過不相容的 Node 版本執行時報告錯誤。
  • yarn addyarn up 現在會尊重 preferInteractive 設定選項。
  • yarn config set 現在支援 -H,--home 旗標,這會導致它更新家目錄設定,而非專案設定。

設定

  • 家目錄設定檔中找到的設定在被舊版 Yarn 使用時不會導致例外。不受支援的選項只會被靜默忽略。這應該會改善使用設定有不同 Yarn 版本的多個專案時的使用體驗。
  • 新的 immutablePaths 設定允許您指定在設定 --immutable 旗標執行 Yarn 時不得變更的路徑。您可以使用它來偵測安裝產出預期之外的變更,不論是 .pnp.jsnode_modules 檔案。

其他

  • 腳本現在可以使用 $RANDOM 變數,以及使用 +-*/()$(()) 內進行簡單的計算
  • 腳本現在可以使用分組大括號 ({echo foo}) 在目前 shell 的內容中執行命令 (不會像 (echo foo) 那樣建立子 shell)。
  • 指令碼現在可以用分號作結尾。
  • PnP 連結器不會移除符合 pnpIgnorePatterns 的資料夾中的殘留 node_modules。

第三方整合

  • PnP 鉤子現在會在需要無法直接存取的 Node 內建函數時顯示更清楚的錯誤訊息(例如從 Webpack 瀏覽器套件中存取 fs 模組)。

2.1.1

yarn set version 2.1.1
  • 修正 iTerm 上的超連結顯示。

2.1.0

yarn set version 2.1.0

生態系統

  • 套件現在可以宣告它們需要解壓縮才能運作,方法是在清單中使用新的 "preferUnplugged": true 欄位。這會損害使用者的體驗(你的專案將會是唯一一個需要硬安裝的),因此請避免使用此欄位,除非別無選擇。

新指令

  • 執行 yarn search 會開啟一個豐富的介面,用於搜尋要安裝的套件(需要 interactive-tools 外掛程式)。
  • 執行 yarn npm logout 會從你的家目錄中移除你的憑證。
  • 執行 yarn plugin import from sources 會讓你能夠從我們的儲存庫的 master 分支建立外掛程式。
  • 執行 yarn workspaces focus 將只會安裝目前的 workspace,以及它可能依賴的任何其他 workspace。--production 旗標將只會安裝它們的生產相依性。
  • 執行 yarn exec 會在目前 workspace 的根目錄中執行指定的指令(從 Classic 分支重新引入)。
  • 執行 yarn create 現在是 yarn dlx 的別名(加上 create- 前綴)。

CLI

  • yarn init 現在會產生一個 EditorConfig 檔案,並在產生的資料夾上執行 git init
  • yarn init 現在支援 -i 旗標,它會自動在專案中釘選 Yarn 版本。
  • yarn init 現在會在產生初始清單時注入來自 initFields 組態設定的設定(未來的版本會移除現在已不建議使用的 initVersioninitLicense 設定)。
  • yarn init 現在會在給定 -w 旗標時初始化一個 workspace 專案。
  • yarn workspaces foreach 現在在 --include--exclude 中支援 glob 模式。
  • yarn set version 現在作為別名 yarn policies set-version(將在 3.x 中棄用)。
  • yarn run 現在支援二進制檔的 --inspect--inspect-brk 開關(例如 yarn run --inspect-brk jest)。
  • yarn removeyarn up 現在支援 glob 模式。
  • yarn dlx 現在會尊重本機專案設定(特別是設定的登錄)。這仍是實驗性質,並將在未來幾個月進一步改善。
  • yarn dlx 現在會在底層指令也傳回結束代碼時正確結束並傳回結束代碼。
  • yarn config get(和 set)現在可以存取巢狀設定值(例如,yarn config get npmScopes.foo.npmRegistryServer 會告訴你哪個伺服器(如果有)是為給定伺服器設定的)。
  • yarn config get 現在會對全世界隱藏其機密(或你的機密)。如有需要,新的 --no-redacted 選項將會關閉此行為。
  • yarn config set 現在有一個 --json 選項,會讓 Yarn 知道它應該將給定的值解釋為 JSON 物件(用於設定伺服器設定等)。
  • yarn workspace foreach 現在會在有錯誤時傳回預期的狀態碼。

設定

  • 登錄認證設定現在可以逐範圍宣告(以前必須逐登錄宣告)。這在 GitHub 套件登錄模型中會很方便,其中每個範圍可能有不同的存取權杖。
  • 設定檔現在使用 ${name} 語法內插環境變數中的值(預設為嚴格;使用 ${name:-default} 提供預設值)。
  • 新的 changesetIgnorePatterns 設定可用於忽略 yarn version check 中的變更集偵測中的一些路徑(變更這些路徑不會在決定哪些工作區需要新版本時考慮)。
  • 新的 changesetBaseRef 設定可用於變更 yarn version check 將在其變更集啟發法中使用的主分支名稱。
  • 新的 httpTimeouthttpRetry 設定允許你設定 HTTP(s) 要求的行為。
  • 新的 preferTruncatedLines 設定允許你告訴 Yarn,如果資訊和警告訊息被截斷以符合單行顯示,是可以接受的(錯誤訊息將會盡可能換行,而將 Yarn 的輸出導向管道將會完全關閉此行為)。
  • 快取壓縮層級現在可以透過 compressionLevel 設定。如果你沒有使用零安裝,使用 0 的值可能會在幾乎沒有成本的情況下帶來速度提升。
  • 外掛現在會從 RC 檔案的位置載入。

通訊協定

  • Git 通訊協定已經改善,現在支援多個遺失的模式。
  • Git 通訊協定現在可以從給定的存放庫複製任何工作空間。為此,請使用 owner/repo#workspace=name 語法(你可以像往常一樣與分支名稱混合使用)。
  • 使用 Git 通訊協定複製的存放庫現在會自動停用 core.autocrlf,以便建置產生確定性的結果。一般來說,已經進行改善以避免新建的套件產生不同的結果。
  • 使用 Git 通訊協定擷取的套件現在將使用 Yarn 1、Yarn 2、npm 或 pnpm 中的任一種建置。選擇將根據來源的內容進行(例如,如果我們偵測到 package-lock.json,我們將使用 npm pack 封裝專案)。
  • exec: 通訊協定有不同的 API。特別是,現在可以存取內建模組,而無需實際需要它們。

安裝

  • 不建議使用的警告現在會在安裝期間顯示。
  • 檔案外 PnP 資料產生已修復(它允許在與 JS 載入器本身分開的 JSON 檔案中產生 PnP 資料)。
  • 虛擬執行個體重複資料刪除中的臨界狀況已修復;具有相同有效對等相依性的套件現在總是共用完全相同的執行個體。
  • 我們用於在路徑中尋找 zip 檔案的啟發式方法已獲得改善。因此,在我們的儲存庫上執行 ESLint 現在需要 28 秒,而不是 57 秒。
  • Yarn 現在會將 node_modules 資料夾排除在工作區偵測之外。因此,在 workspaces 欄位中列出 **/* 現在會將所有子套件偵測為工作區。
  • 快取名稱已變更,以使快取內容可尋址。特別是,這表示在我們需要修正擷取步驟中的錯誤時,我們不再需要變更全域快取金鑰。
  • PnP 連結器現在具有額外的寬鬆模式(可選,並透過 pnpMode: loose 設定啟用)。在此模式下,Yarn 會計算在 node_modules 連結器下會提升的套件清單,並讓應用程式程式碼僅透過警告存取它們。然而,此模式不會成為預設值 - 警告無法由應用程式程式碼擷取,因此寬鬆模式的輸出可能會相當冗長,通常比嚴格模式更令人困惑。
  • 由於我們知道 v2 沒有不正確的提升錯誤(但在 v1 中發現了一些),而且其效能大致相同,因此 Yarn 2 的 node_modules 連結器現在被認為比 v1 的更穩定,我們建議使用者即使不想使用 Plug'n'Play 也要移轉到它。會有更多改善,但它們大多會在使用者體驗中(例如將 PnP 和 nm 混入單一安裝)。

呈現

  • 在小型終端機(或未顯示其大小的終端機)上呈現可能會導致斷言失敗。這現在已修復。
  • yarn upgrade-interactive 的輸出已改版,以重新引入一些在將指令從 v1 移植到 v2 時已省略的元素。
  • 錯誤代碼現在在相容的終端機上是超連結。

第三方整合

  • PnP 鉤子現在會顯示中斷對等相依鏈的套件清單(以前只會顯示未提供對等相依性的套件名稱,但不會顯示哪個祖先負責)。
  • 我們已將 lutimes 支援新增至 Node 本身,因為否則不可能實作完美的複製機制(複製的符號連結最終會與其原始檔具有不同的 mtime)。
  • SDK 檔案已從 .vscode/pnpify 移至 .yarn/sdks
  • 已針對 VSCode 整合進行改善。特別是,PnP 支援現在已足夠完善,開始修正 VSCode 在正確命名工作區方面長期存在的問題。
  • 我們已透過 TypeScript 為第三方協定提供 VSCode 支援。因此,zip 檔案現在能適當地支援「跳至定義」工作流程(這需要安裝 ZipFS 擴充功能)。
  • SDK 輸出已遷移至與其他指令相同的標準。
  • SDK 現在可以為 VSCode 和 Vim 準備開發環境。已新增更多第三方工具,例如 Svelte 擴充功能。注意:SDK 僅適用於編輯器整合;如果您只想在基本文字編輯器上撰寫 JavaScript,則不需要 SDK。

其他

  • 指令碼現在可以使用 glob 模式,這將不論基礎 shell 為何都能解析(因此它可以在 Windows 和 Linux 上執行)。請注意,這只涵蓋檔案 glob - 使用類似於 echo {foo,bar} 的指令碼無法執行,除非實際存在名為 foo 和/或 bar 的檔案。
  • 將 SIGKILL(或其他訊號)傳送至 Yarn 程序並未導致子程序停止。Yarn 現在會轉送訊號,並等待其子程序結束。
  • 有些暫存資料夾未正確清除;此問題已修正。
  • 已將對 .cjs 擴充功能的支援新增至多個檔案,以便更容易使用 "type": "module"
  • 已對套件進行各種大小和啟動時間最佳化。

2.0.0

yarn set version 2.0.0

請記住,遷移指南 可協助您將應用程式移植至 Yarn 2。

值得注意的修正

  • 使用 yarn link 現在會根據需要連結套件的套件來適當解析對等相依性,而不是根據連結專案資料夾中安裝的相依性來解析。

  • 套件現在只會在其相依性之一以某種方式變更時才建置。請注意,這包括直接相依性和傳遞相依性,這可能會在某些情況下觸發非直覺性的重新建置(例如,由於 node-sass 相依於 lodash.assign,升級 lodash.assign 會觸發重新建置)。稍後版本將透過為 dependenciesMeta 物件引入新的 runtime 欄位來改善此問題,該欄位會將套件排除在建置金鑰運算之外(即使在該欄位生效之前,您也可以開始設定此旗標)。

  • 註冊主機名稱最後不再是鎖定檔案的一部分。這表示你可以透過變更 npmRegistryServer 設定,隨時切換註冊。一個不幸的限制是,這不適用於使用非標準路徑來儲存其封存檔案的註冊 (例如 /@scope/name/-/name-version.tgz)。一個這樣的範例是 NPM Enterprise,它會看到完整路徑儲存在鎖定檔案中。

  • --immutable 選項 (--frozen-lockfile 的新名稱) 現在會在鎖定檔案因項目移除而變更時正確回報 (它先前只會拒絕新項目,不會拒絕移除)。

顯著變更

  • 我們放棄支援 Node 8,它已於 12 月達到其生命週期結束。

  • 現在預設禁止透過 http 存取註冊 (Yarn 會擲回例外,並要求改用 https)。這可以使用 unsafeHttpWhitelist 按主機名稱個別覆寫。

  • devDependencies 的意義略有改變。到目前為止,開發相依項被描述為「我們只在開發中使用的相依項」。由於我們現在提倡將所有套件儲存在儲存庫中 (以保證可重製的建置),這已不再有意義。因此,我們對開發相依項的描述現在是「不會由套件使用者安裝的相依項」。除了名稱之外,它並沒有真正改變任何其他內容,但你越了解越好。

    • 一個特別的注意事項是,你目前無法僅安裝生產相依項。我們計畫在稍後新增這項功能,但由於啟用 零安裝 會導致你的儲存庫包含所有套件 (生產和開發),因此這項功能不再像以前那麼重要。
  • 執行 yarn link <package> 現在具有半永久性的效果,因為 <package> 會新增為你的主動工作區的相依項 (使用新的 portal: 協定)。除此之外,工作流程保持不變,這表示在某處執行 yarn link 會將本機路徑新增至本機註冊,而 yarn link <package> 會將相依項新增至先前連結的套件。

    • 若要停用此類連結,只需移除其 resolution 項目,然後再次執行 yarn install 即可。
  • Yarn 組態已更新,不再讀取 .npmrc 檔案。這過去造成許多關於組態來源的混淆,因此邏輯現在非常簡單:Yarn 會在目前目錄及其所有上層目錄中尋找 .yarnrc.yml 檔案。

    • 請注意,組態檔案現在稱為 .yarnrc.yml,因此預期為有效的 YAML。可用的設定列於 此處
  • 現在產生的鎖定檔應與 Yaml 相容,同時也與舊式鎖定檔相容。舊式鎖定檔將自動轉移,但這需要與登錄中心進行一些往返,以取得先前未儲存的更多資訊,因此第一次安裝會稍微慢一些。

  • 快取檔案現在是 zip,而非 tgz。這會影響冷安裝效能,因為目前可用的登錄中心不支援它,這需要我們自己轉換。零安裝是一種抵銷此成本的方式,我們希望登錄中心會考慮在未來提供 zip 作為選項。

    • 我們選擇 zip 是因為它在工具普遍性和隨機存取效能方面具有完美的結合(tgz 需要解壓縮整個檔案才能存取單一檔案)。

套件清單 (package.json)

如要查看關於每個可能欄位的完整文件,請查看我們的 文件

  • 清單的 publishConfig 鍵現在支援兩個新欄位:mainbinmodule 欄位將用來取代與產生的檔案一起運送的清單中各自頂層對應項的值。

  • 清單根目錄中現在支援兩個新欄位:dependenciesMetapeerDependenciesMetapeerDependenciesMeta 實際上在 Yarn 1 中也受支援,但 dependenciesMeta 是新增的)。這些欄位用於儲存每個套件獨有的依賴設定。

    • 這兩個新欄位,以及所有支援的設定,都是完全選用的。如果它們不存在,Yarn 將會繼續執行您預期的動作 - 它們只是一個用於公開更精細設定的機制。

    • 其中一些設定只能在專案頂層清單中宣告,並會在其他任何地方被忽略(例如 built),而其他設定則會產生每個套件的效果(例如 optional)。根據經驗法則,dependenciesMeta 設定總是專案範圍的(因此只會在頂層 package.json 中考量),而 peerDependenciesMeta 設定則是套件特定的。

    • dependenciesMeta 欄位涵蓋在 dependenciesdevDependencies 欄位中宣告的依賴項。

    • dependenciesMeta 欄位接受兩種類型的金鑰:通用套件名稱(lodash)或特殊套件版本lodash@1.2.3)。後者語法僅適用於頂層清單,因此在依賴項/傳遞依賴項中看到時將會被忽略

  • dependenciesMeta[].comment 欄位預期是一個字串欄位。儘管它目前在任何地方都沒有實際使用,我們建議您在此撰寫有關為何在此處而不是其他任何地方使用某些套件的理由的註解。這對於外掛程式作者來說可能會很有用。

  • dependenciesMeta[].built 欄位是一個布林旗標;將其設定為 false 會導致套件管理員在考量需要建置的套件清單時忽略此套件。如果專案使用 enable-scripts: false,傳統上會發出的警告將會降級為一個簡單的通知。此設定是專案範圍的。

  • peerDependenciesMeta[].optional 欄位是一個布林旗標;將其設定為 true 會阻止套件管理員在指定的對等依賴項遺失時發出警告(如果您提供與特定第三方套件的選用整合,並且不希望用一堆無關的警告來污染您的使用者安裝,您通常會想要使用它)。此設定是套件特定的。

  • resolutions 欄位不再支援其模式中的 glob 語法,因為它與其自己的無 glob 語法重複,並造成不必要的混淆。

    {
    "resolutions": {
    - "**/@babel/core": "7.5.5",
    + "@babel/core": "7.5.5",
    }
    }

工作區

  • 現在可以使用特殊 workspace: 協定來參照工作區。此協定接受相對路徑到工作區,或將與候選工作區的 version 欄位進行比較的分號範圍。

  • 工作區不再需要指定版本。如果透過 workspace: 解析器參照,引擎將假設它們的版本為 0.0.0(這使得 workspace:* 成為表達「閉嘴,拿走我的工作區」的好方法)。

    • 話雖如此,透過 workspace: 協定參照的工作區,如果目標工作區定義了版本,其參照會在打包時變更。否則會擲回錯誤,且套件無法打包。
  • 工作區現在可以包含子工作區。這遵循與先前相同的限制,表示任何想要公開子工作區的工作區都必須宣告為 private: true

CLI

  • 特定於 npm 的指令(例如 yarn loginyarn publish)已移至特定命名空間(yarn npm login / yarn npm publish)。這不會影響 yarn pack 指令,因為它被視為夠通用,可以放在頂層。

  • 執行 yarn <path> add ... 會在 <path> 指出的位置執行 add 指令。這適用於任何指令。唯一的限制是 <path> 必須為 ...,或必須包含斜線(為了與腳本和指令名稱區分)。

  • 執行 yarn add -P <package> 會預設使用 *,而不是為 <package> 解析新的範圍。這個變更只會影響同儕依賴項(-P),而且可以透過手動指定範圍(yarn add -P lodash@^4.0.0)來停用。

  • 執行 yarn add <package> -i 現在會根據其他工作區的依賴項提出建議。這個行為可以透過在設定中將 preferInteractive 設為 true 來設為預設值。

  • 執行 yarn foo:bar 會執行 foo:bar 腳本,不論哪個工作區宣告它,只要只有一個工作區宣告即可。這個變更只會影響名稱包含至少一個冒號的腳本。

  • 執行 yarn remove -A <package> 會從所有工作區的所有依賴項組中移除 <package>,不論您的 cwd 為何。

  • 執行 yarn set resolution <package> <resolution> 會強制解析器對指定的套件描述符使用特定解析度。請注意,傳遞為參數的描述符必須與您想要覆寫的描述符完全相同。這個指令是一個方便的工具,可以手動最佳化一些可以從重疊中受益的範圍。

  • 執行 yarn up <package> 會一次升級所有工作區中的 <package>(僅在它們已使用指定套件時 - 未使用的套件不會被加入)。加入 -i 旗標也會導致 Yarn 要求您確認每個工作區。

  • 執行 yarn config --why 會告訴你組態中每個值的來源。我們建議在你無法確定 Yarn 會有特定設定的原因時使用它。

  • 執行 yarn pack 將不再總是包含 嵌套 的 README、CHANGELOG、LICENSE 或 LICENCE 檔案(請注意,如果在要封裝的工作區根目錄找到這些檔案,它們仍會被包含,這通常是情況)。如果你依賴於此(有點意外)行為,你可以手動將這些檔案新增到 package.jsonfiles 欄位。

  • yarn upgrade-interactive 指令已移至需要透過 yarn plugin import interactive-tools 安裝的外掛程式。它也已重新撰寫,我們會持續改進。

其他

  • 現在支援新的協定 portal:。入口網站非常類似於 link:,因為它們直接指向磁碟上的位置,但與連結不同的是,它們也會考量目標位置的相依性(而連結不會在意這些)。為了讓你更了解,當你想要針對 套件 時,你會使用入口網站,而當你想要針對非套件資料夾(例如你的 src 目錄或類似目錄)時,你會使用連結。

  • 現在支援新的協定 patch:。patch 協定可用於自動套用變更到套件的來源。它非常類似於 patch-package,但直接整合在 Yarn 中(包括其快取和檢查總和系統)。