monorepo


1.什么是monorepo?

Monorepo 它是一種管理 organisation 代碼的方式,在這種方式下會摒棄原先一個 module 一個 repo 的方式,取而代之的是把所有的 modules 都放在一個 repo 內來管理。

目前諸如 Babel, React, Angular, Ember, Meteor, Jest 等等都采用了 Monorepo 這種方式來進行源碼的管理。

2.git 多倉庫管理的缺點

  1. 管理調試困難
  2. 分支管理混亂
  3. 依賴關系復雜
  4. 三方依賴版本可能不一致
  5. 占用總空間大
  6. 不利於團隊協作

每個小點,需要仔細分析其困難

3.什么是lerna?

Lerna 就是基於Monorepo 理念的工具實現。使用lerna 管理的目錄結構:

├── packages
│      ├─ module-a
│      │    ├─ src            # 模塊 a 的源碼
│      │    └─ package.json   # 自動生成的,僅模塊 a 的依賴
│      └─ module-b
│           ├─ src            # 模塊 b 的源碼
│           └─ package.json   # 自動生成的,僅模塊 b 的依賴
├── tsconfig.json             # 配置文件,對整個項目生效
├── .eslintrc                 # 配置文件,對整個項目生效
├── node_modules              # 整個項目只有一個外層 node_modules
└── package.json              # 包含整個項目所有依賴

所有全局配置文件只有一個,這樣不會導致 IDE 遇到子文件夾中的配置文件,導致全局配置失效或異常。node_modules 也只有一個,既保證了項目依賴的一致性,又避免了依賴被重復安裝,節省空間的同時還提高了安裝速度。

兄弟模塊之間通過模塊 package.json 定義的 name 相互引用,保證模塊之間的獨立性,但又不需要真正發布或安裝這個模塊,通過 tsconfig.json 的 paths 與 webpack 的 alias 共同實現虛擬模塊路徑的效果。

4.如何用lerna進行項目管理:

  1. npm install —global lerna
  2. git init monorepo-example        cd monorepo-example
  3. Lerna init
├──packages
├── lerna.json
└── package.json

       4. cd packages

   5.mkdir monorepo-example-module-a       cd  monorepo-example-module-a       npm init

       6.Mkdir  monorepo-example-module-core     cd monorepo-example-module-core    npm init

假設module-a 依賴module-core ,然后在根目錄執行

  7.cd monorepo-example 

  8. lerna bootstrap  生成如下的目錄結構。

lerna 是業界知名度最高的 Monorepo 管理工具,功能完整.

5.實踐monorepo

1.提升common dependencies
2.提升tools 和 build scripts


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM