基于 Dawn 进行多工程管理

简介: 基于 Dawn 进行多工程管理 # 1. 简述 当一个项目中子工程较多时,就会面临「单仓库(Monorepo)」还是「多仓库(Multirepo)」管理的问题。当然两个方式各有优缺点,而我们选择多工程单 Repo 时,能够带来一些管理上的简便,比如「Issues 和 PR 的集中管理、整体一致的 Changelog 等」。而进一步「模块间的依赖管理、版本管理、发布管理」等问题,如果

基于 Dawn 进行多工程管理

1. 简述

当一个项目中子工程较多时,就会面临「单仓库(Monorepo)」还是「多仓库(Multirepo)」管理的问题。当然两个方式各有优缺点,而我们选择多工程单 Repo 时,能够带来一些管理上的简便,比如「Issues 和 PR 的集中管理、整体一致的 Changelog 等」。而进一步「模块间的依赖管理、版本管理、发布管理」等问题,如果能有在工具层的支持,那「 多工程单 Repo 」将进一步方便开发者。

一些项目或会借助额外的工具比如 Lerna,而基于 Dawn 的工程再引入 Lerna 又显得麻烦,且 Lerna 在使用 tnpm 时会有一些不便之处。

而 Solution 中间件是针对 Dawn 的单 Repo 多 Package 解决方案,通过 Solution 中间件可基于 Dawn 的基本命令在一个 Reop 中轻易管理多个 Packages,在此介绍一下 Solution 中间件的使用方法。

2. 使用

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 中执行相关命令。

3. 相关链接

目录
相关文章
技术宅之---用手机实现“移动网关”
本文假定读者已知道内网穿透相关认知。 或许你用过花生壳、frp、ngrok、teamviewer等穿透工具,今天要给大家介绍的是smarGate(https://github.com/lazy-luo/smarGate) 1、samrGate是什么? 官方命名为“移动网关”,通过手机客户端将位于内网的服务端网络进行按需暴露。
4009 0
|
消息中间件 关系型数据库 Kafka
flink cdc 数据问题之数据丢失如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
JavaScript 前端开发 开发者
React 的正确使用方法:ref 篇
你真的用对了 useRef 吗?在与 TypeScript 一起使用、以及撰写组件库的情况下,你的写法能够避开以下所有场景的坑吗?
|
11月前
|
机器学习/深度学习 存储 人工智能
【AI系统】离线图优化技术
本文回顾了计算图优化的各个方面,包括基础优化、扩展优化和布局与内存优化,旨在提高计算效率。基础优化涵盖常量折叠、冗余节点消除、算子融合、算子替换和算子前移等技术。这些技术通过减少不必要的计算和内存访问,提高模型的执行效率。文章还探讨了AI框架和推理引擎在图优化中的应用差异,为深度学习模型的优化提供了全面的指导。
301 5
【AI系统】离线图优化技术
|
10月前
|
人工智能 自然语言处理 API
AppFlow:无代码部署Dify成为公众号客服
本文介绍如何通过计算巢AppFlow无代码部署Dify应用,并将其配置到微信公众号中作为智能客服使用。具体步骤包括:访问计算巢AppFlow模板中心选择Dify实例模版,创建连接流并配置Dify和微信公众号的鉴权凭证,完成部署后发布连接流。最终,您可以通过微信公众号发送消息,接收AI智能客服的回复。
1522 9
AppFlow:无代码部署Dify成为公众号客服
|
11月前
|
存储 数据挖掘
服务器数据恢复—ZFS文件系统下数据恢复案例
服务器存储数据恢复环境: ZFS Storage 7320存储阵列中有32块硬盘。32块硬盘分为4组,每组8块硬盘,共组建了3组RAIDZ,每组raid都配置了热备盘。 服务器存储故障: 服务器存储运行过程中突然崩溃,排除人为误操作、断电、进水和其他机房不稳定因素。管理员重启服务器存储,系统无法进入,需要恢复服务器存储中的数据。
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
存储 机器学习/深度学习 XML
PyMuPDF 1.24.4 中文文档(二)(4)
PyMuPDF 1.24.4 中文文档(二)
419 0
|
Web App开发 JavaScript Java
《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)
【4月更文挑战第20天】本文主要介绍了如何使用Selenium处理网页中的alert弹窗,包括accept()、dismiss()、getText()和sendKeys()等方法。文章首先简述了在前一篇文章中提及的switchTo()方法,然后详细讲解了alert弹窗的几个关键方法。接着,作者给出了一个名为ModalDialogueBox.html的测试页面,展示了警告框、确认框和提示框三种类型的模态对话框,并提供了相应的JavaScript代码。最后,文章提供了一个实际的项目实战案例,展示了如何在Java中使用Selenium处理alert弹窗,并给出了相关代码示例。
230 0
|
机器学习/深度学习 人工智能 自然语言处理
万字Gemini技术报告来啦 | Gemini这么强,GPT-4输的有点多,多模态超过人类专家
万字Gemini技术报告来啦 | Gemini这么强,GPT-4输的有点多,多模态超过人类专家
780 0