在團(tuán)隊開發(fā)中,我們經(jīng)常會有工具包多、項目多,隨著團(tuán)隊發(fā)展隨之而來的問題會越來越多。本次分享用Rush解決以上問題,在實際中探索出 真正的Monorepo 場景的較佳實踐。
首先我們來了解一下如何開始Rush
第一步:安裝
npm install -g @microsoft/rush
可通過rush h 判斷是否安裝成功
第二步:初始化
安裝成功后,可通過rush init 命令初始化項目

目錄結(jié)構(gòu)

第三步:安裝依賴
Rush安裝依賴有幾種方式:
1、rush add -p PACKAGE --dev --all
跟目錄執(zhí)行命令安裝所有的包
2、rush add -p PACKAGE --dev
在包里面執(zhí)行,只安裝在當(dāng)前包中
第四步:rush update
rush update 命令會依據(jù) package.json 文件安裝依賴,并按需更新 shrinkwrap 文件(shrinkwrap 文件是存儲倉庫內(nèi)所有項目的依賴和版本的中心,它被放到 "common/config/rush"文件夾下)。此命令Rush 會在一次性給倉庫內(nèi)的所有項目安裝。 當(dāng)你從 Git 上拉去文件,或者修改
完 package.json 文件后,需要執(zhí)行 "rush update" 才能開始工作。如果無需更新,則 "rush update" 會在瞬時完成。
rush update和rush install的區(qū)別:
"rush install" 命令會基于 "rush update' 創(chuàng)建/更新的 shrinkwrap 文件來給倉庫內(nèi)的所有項目安裝依賴)。
清除依賴可以用rush purge命令,清除node_modules和rush相關(guān)依賴。
通過以上流程我們可以得到一個空項目,但是一個完整的monorepo需要完善的發(fā)布流程,我們還需要一些配置
rush.json
在rush init的時候生成的rush.json,在projects中配置相關(guān)項目,在projects中配置的項目,rush可以識別出,并可執(zhí)行rush update等相關(guān)命令,需要publish的包,可通過配置shouldPublish屬性,即可操作發(fā)包相關(guān)流程。
關(guān)于多包發(fā)布
在 Rush 中,rush change 是發(fā)包流程的起點,會產(chǎn)生changes文件,/common/changes/[packages]/[feature_time].json,流程如下:

rush version 或 rush publish --apply 則會基于生成的 changefile.json 進(jìn)行版本號的更新,被發(fā)布 package 的上層 package 的版本號可能會被更新,rush publish --publish 則會基于 changefile.json 進(jìn)行對應(yīng) package 的發(fā)布。
Rush 的發(fā)布流程與 Changesets 基本一致 。
rush中發(fā)布私有源,需要私有源配置,可通過注入環(huán)境變量校驗身份信息
