非死book發布JavaScript包管理器Yarn 1.0
非死book 在官方網站上正式發布了 JavaScript 包管理器 Yarn 1.0。在從 Yarn 誕生之日起至今的 11 個月時間里,Yarn 擁有了大批的追隨者。GitHub 上有 175,000 個項目在使用 Yarn,許多大大小小的公司和廣大開源社區也在使用 Yarn,每個月通過 Yarn 下載的包數量接近 30 億個。Yarn 為廣大用戶節省了大量的時間。推ter 和微軟說他們的包安裝速度因此提升了 5 倍,Expo、Kenzan 和 Sentry 表示性能和穩定性的提升加快了他們的代碼交付速度。Yarn 現在已經成為主流持續集成平臺的預安裝項,如 CircleCI、Travis CI 和 AppVeyor。
Yarn 在 非死book 內部也得到了廣泛的采用,包括 非死book 主應用、Instagram、Oculus 和 WhatsApp。Yarn 具有極佳的伸縮性,可以支持成千上萬個直接或間接的包依賴。Yarn 的設計初衷就是要保證、穩定性、彈性和高性能。基于這些原則,Yarn 1.0 帶來了更多的新特性,希望能夠幫助 Yarn 社區更快地發展,構建更好的項目。
Yarn 1.0 新特性
1. Yarn 工作區(workspace)
單體倉庫(mono repository)模式(方便跨項目共享代碼,同時避免依賴同步問題)如今已經被大型的科技公司所采用,也正逐漸蔓延到開源社區和一些小型公司。為了讓人們更方便地采用該模式,Yarn 增加了一個新特性——工作區。工作區可以自動從多個 package.json 中收集所有的依賴,然后一次性把它們安裝完畢。項目根目錄下會生成 yarn.lock 來鎖住這些文件。如果多個工作區之間存在依賴,Yarn 會為它們創建鏈接,這樣所有的項目就可以共享最新的代碼。
2. yarn.lock 自動合并
多個開發者在開發同一個項目時,有可能會更新包依賴,導致 yarn.lock 文件出現沖突。如果只有一兩個沖突,那么完全可以通過手動來解決,但如果沖突數量眾多,解決沖突就會變成一件很麻煩的事情。Yarn 為此提供了自動合并 yarn.lock 文件的功能。通過運行 yarn install 命令可以觸發合并動作,如果合并成功,新的 yarn.lock 就會被保存到磁盤上。
3. 可選擇依賴版本(selective version resolution)
有時候,你的項目間接依賴了其他項目的包,而這些依賴包有了新版本,你急需使用依賴包的新功能。這個時候你要么等待其他項目更新這些依賴包,要么給其他項目拉一個分支,然后更新依賴包。但這些都不是最理想的方式。Yarn 提供了可選擇依賴版本的新特性,通過在 package.json 文件里定義 resolutions 字段來告訴 Yarn 該使用哪個版本的依賴包。下圖就是一個通過該特性限定使用某個 async 模塊版本的例子。
需要指出的是,該特性完全由社區設計和實現,Victor Noël提交了 RFC 和驗收測試,并由 Kaylie Kwon 負責實現。
問題修復和其他方面的改進
- 更好的交互式升級體驗
- 更快的文件完整性檢查
- 提供了一個獨立的 yarn.lock 文件解析模塊
- Yarn 版本的一致性保證
社區的參與情況
項目在啟動后就引入了 RFC 流程,鼓勵社區參與項目的討論。有很多特性都來自社區的貢獻,僅在 2017 年,就有超過 40 位貢獻者為 Yarn 貢獻了他們的力量。
未來的計劃
發布一個新包通常需要創建變更日志、執行版本語義、同步相關項目的版本,還需要手動或通過腳本完成其他很多步驟。如果 Yarn 能夠為包發布者完成這些事情那豈不妙哉?另外,在添加或升級新包時,包的安全性也是一個很重要的考慮點。Yarn 將會在包安全方面扮演一個重要的角色,Yarn 將會與 npm 合作,將雙因子認證帶到 Yarn 上。
來自: InfoQ