NX 構成的 monorpeo 主要有兩種不同類型的結構,分別是 package-baed 跟 integrated ,這邊來簡介兩者的區別。
專案中的每個 app 都有自己的 package.json 跟 nodemodules,用於定義各自的依賴,可以有共用的套件但用著不同的版本。因為依賴是區分的所以每個 app 的建置方式跟一般狀況的 app 差不多,然後可以利用 package.json 定義 NX 可以執行的操作。
好處是各個依賴不會互相干擾可以各自升級,壞處就是管理較複雜,新建的專案要自行設定套件依賴。
另外的好處是如果將既有的 app 納入到 monorepo 的管理時,不太需要額外設定。
專案中的 app 沒有各自的 package.json ,而是只有根目錄的 package.json 跟 nodemodules 去定義所有 app 共通的依賴版本,各個 app 只有 project.json 用於定義 NX 的操作。
好處壞處都是依賴版本是唯一的,所以建立新的 app 的時候不用再另外定義依賴,但是當依賴升級時所有的 app 都要檢查是否能匹配並修改。
另外幾乎無法納入既有轉案,但是可以作為 package-based 的專案先混入。
另外除了 monorepo 外 NX 也可以作為獨立 app 的開發輔助,這種結構名稱叫做 standalone。
只有一個位於根目錄的 app ,額外添加了 nx.json
用於定義 NX 的做操作,幫助序列執行任務跟任務結果暫存,其他就跟平常一樣。