基於 Dawn 進行多工程管理

基於 Dawn 進行多工程管理

  1. 簡述
    當一個項目中子工程較多時,就會面臨「單倉庫(Monorepo)」還是「多倉庫(Multirepo)」管理的問題。當然兩個方式各有優缺點,而我們選擇多工程單 Repo 時,能夠帶來一些管理上的簡便,比如「Issues 和 PR 的集中管理、整體一致的 Changelog 等」。而進一步「模塊間的依賴管理、版本管理、發佈管理」等問題,如果能有在工具層的支持,那「 多工程單 Repo 」將進一步方便開發者。

一些項目或會藉助額外的工具比如 Lerna,而基於 Dawn 的工程再引入 Lerna 又顯得麻煩,且 Lerna 在使用 tnpm 時會有一些不便之處。

而 Solution 中間件是針對 Dawn 的單 Repo 多 Package 解決方案,通過 Solution 中間件可基於 Dawn 的基本命令在一個 Reop 中輕易管理多個 Packages,在此介紹一下 Solution 中間件的使用方法。

  1. 使用

2.1. 啓用 Solution 中間件
一個基於 Dawn 的工程都會有一個 pipe.yml,聲明瞭工作流中各階段需要做的事情,每件事情能常是由某個中間件提供能力,Solution 也是作爲一箇中間件存在,爲 Dawn 帶來多 Packages 的管理能力。

dev:

  • name: solution
    build:
  • name: solution
    test:
  • name: solution
    add:
  • name: solution
    link:
  • name: solution
    publish:
  • name: solution
    通過如上的配置,將 Solution 工程也就是頂層 Package 的所有 Pipeline 都交由 Solution 中間件負責。

2.2. 在 Solution 中添加 Package
在 Solution 工程的根目錄新建一個名稱 packages 的目錄(默認爲 packages 但可指定爲其他目錄),然後,執行如下命令

dn add
根據提示選擇 ‘Create a new package’,可快速在 Solution 中創建一個 Package。當然也可手動在 packages 目錄中創建新的 Package

2.3. 配置 packages
在 .dawn 目錄中新建一個 solution.yml 配置文件,在文件中添加如下配置

是否爲統一模式(可省略,默認爲 true)

unified: true

packages 的根目錄 (可省略,默認爲 ./packages)

root: ./packages

聲明所有 packages

packages:

  • name: your_package1
  • name: your_package2
  • name: your_package3
    deps:
    • your_package1
    • your_package2
      如上示例,通過 packages 可聲明 Solution 中有哪些 package,聲明的順序即「測試、構建、發佈」等的順序。

在聲明完成後,執行如下命令即可自動完成所有 Packages 間的依賴配置

dn run link

2.4. 安裝外部依賴
爲所有或指定的 Pakcages 安裝依賴時,也是使用 dn add 命令,如下

dn add
根據提示選擇 Install a remote package 即可爲全部或指定的 Packages 安裝依賴的遠程 npm package。

2.5. 發佈 Packages
如需發佈能力,那麼 solution 中的每個 package 都應該在 pipe 中配置 publish,當 unified 爲 true 時,在執行 dn publish 時,會爲每個 package 生成統一的版本,並全部發布。而當 unified 爲 false 時,將僅依次執行每個 package 自已的 publish pipeline。

通常 Package 的 publish 配置如下:

publish:

  • name: call
    pipe:
    • test
    • build
  • name: publish
    然後,在 Solution 根目錄,即可通過如下命令完成發佈

dn publish

2.6. 其他常規操作
通常情況下,在 Solution 中和單工程的 Dawn 命令是一樣,參考如下這些示例命令

執行測試

dn test

執行構建

dn build

啓動本地開發

dn test

2.7 執行任意命令
有時我們想在所有或指定的幾個 Packages 中執行一些命令,和單工程中執行自定義 pipe 類似,命令如下:

dn run
執行如上命僅,將會讓開發人員選擇目示 Pakcages,並提示輸入命令(任意的 shell 命令),輸入後回車卻可在指定的 Pakcage 中執行相關命令。

最後給大家推薦我現在自己用的服務器:三豐雲 https://www.sanfengyun.com在這裏插入圖片描述

相關文章
相關標籤/搜索