【@changesets/cli】变更集实战教程

一、背景概述

前端目前基于Monorepo架构的npm包开发很普遍,在开发完毕后,我们需要对包进行版本号升级,并且部署,这些操作如果是手动来操作的话,很麻烦,而且容易出错。

例如有这样的场景:

-apps
-packages-core-layout-plugins

我们在发版的时候,需要手动去更改corelayoutplugins三个插件包的版本号。

并且如果要查看每个包的变更迭代的话,需要单独查看子包的git log进行查看,但是有时git log的记录不代表版本真正的迭代变更,最常见的是子包的一个特性开发,会分成多个commit去提交。

以上场景我们可以使用changeset来解决,查看:官网地址。

二、正常模式

1、安装 changesets

进入Monorepo项目根目录,执行下列命令:

# 安装 changesets
pnpm add -W -D @changesets/cli

2、初始化项目

# 初始化 changesets 文件夹
npx changeset init
#pnpm exec changeset init //pnpm的话执行pnpm exec,效果一致

执行完初始化命令后,会在工程的根目录下生成 .changeset 目录,其中的 config.json 作为默认的 changeset 的配置文件。

config.json 代码如下:

{"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json","changelog": "@changesets/cli/changelog","commit": false,"fixed": [],"linked": [],"access": "restricted","baseBranch": "personal-wjb","updateInternalDependencies": "patch","ignore": ["docs", "micro-app", "umi3", "umi4"]
}

配置说明:

  • changelog:changelog 生成方式

  • commit: 不要让 changesetpublish 的时候帮我们做 git add

  • linked: 配置哪些包要共享版本

  • access: 公私有安全设定,内网建议 restricted ,开源使用 public

  • baseBranch: 项目主分支

  • updateInternalDependencies: 确保某包依赖的包发生 upgrade,该包也要发生 version upgrade 的衡量单位(量级)

  • ignore: 不需要变动 version 的包

  • ___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH: 在每次 version 变动时一定无理由 patch 抬升依赖他的那些包的版本,防止陷入 major 优先的未更新问题

更多配置说明,请查看【changeset官网】

3、配置package.json

"changeset": "changeset",
"packages-version": "changeset version",
"publish:only": "changeset publish --registry=指定仓地址"

4、提交变更集

执行pnpm changeset,进入交互式变更集设置命令行:

image.png
在这里插入图片描述

这里需要注意的是,版本的选择一共有三种类型,分别是 patchminormajor,严格遵循 semver 规范。

可以简单按照下图这么理解:

image-20240325162759784

5、升级版本号

当我们开发完成一个特性需求之后,我们的.changeset目录下可能会缓存了很多的变更记录,这时候我们要准备发版,就需要进行升级版本号操作,升级完后,.changeset目录中缓存的所有UNIQUE_ID.md文件会被清空。

执行pnpm packages-version,由于上面【步骤4】选择了补丁版本(patch),所以只会升级第三位版本号,变成1.0.1

{- "version": "1.0.0",+ "version": "1.0.1",
}

然后如果有些包不需要升级版本号的话,可以通过设置/changeset/config.json中的ignore属性进行过滤。或者直接设置待过滤包的package.json,添加private:true设置。

命令执行完成后,会在每个需要升级的包目录下,自动生成CHANGELOG.md文件,会记录当前包的所有的变更。

6、部署

执行pnpm publish:only,会自动部署到指定的npm仓。之后就可以正常使用。

设置子包中的package.json中的publishConfig.registry=npm仓,可以指定部署目标仓地址。

三、预发布模式

1、进入预发布模式

pnpm exec changeset pre enter <preid>

preid 为预发布版本标记,例如 alphabeta 等,默认值为 next

我们执行pnpm exec changeset pre enter next,执行成功后会在.changeset中新增pre.json文件。

//pre.json
{"mode": "pre","tag": "next","initialVersions": {"micro-app": "1.0.0","@my-package/components": "1.0.17","@my-package/hooks": "1.0.5","@my-package/utils": "1.0.3"},"changesets": []
}

2、开发

进入预发布模式后,我们可以进行正常的代码开发,和变更集提交。

我们这里添加了两个变更集,如图:

<!-- fluffy-seahorses-watch.md -->
---
"@my-package/components": patch
"@my-package/utils": patch
---修改路由
<!-- breezy-maps-listen.md -->
---
"@my-package/hooks": patch
"@my-package/utils": patch
---修改路由配置-2

3、升级版本号

执行:changeset version ,由于是在【预发布模式】,更新的版本号会加上<preid>标记。

例如:
在这里插入图片描述
预发布模式下,后续的版本号升级都会更新末尾的索引号。按照这个逻辑,下次@my-package/components更新的版本号就是1.0.18-nest.1

如图:

image-20240326163933128

更新版本号后,pre.json中的内容也会更新:

//pre.json
{"mode": "pre","tag": "next","initialVersions": {"micro-app": "1.0.0","@my-package/components": "1.0.18-next.1","@my-package/hooks": "1.0.5","@my-package/utils": "1.0.3"},"changesets": ["breezy-maps-listen","fluffy-seahorses-watch","tender-cars-taste"]
}
  • changesets:中记录了变更集文件文件的文件名ID。

***注意:*为了使项目能够通过变更集进行跟踪,它需要一个最小的 package.json,其中至少包含name, privateversion。否则这里升级版本号会报错。如图:

image-20240326163244748

4、退出预发布模式

执行:pnpm exec changeset pre exit 命令,提示如下:

image-20240326164611081

可以看到执行成功后,控制台打印出提示:再次changeset version后,就会切换到正常的版本号。

5、切换到正常版本号

执行命令pnpm exec changeset version,执行成功后系统会做以下操作:

  1. 删除pre.json.changeset目录下的所有变更集文件。
  2. 将所有子包的版本号切换成正式版本号,例如:1.0.18-nest.1 -> 1.0.18

之后我们就可以正常进行提交代码提交,并执行changeset publish部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.Git快速入门

文章目录 Git快速入门1.Git概述2.SCM概述3.Git安装3.1 软件下载3.2 软件安装3.3 软件测试 Git快速入门 1.Git概述 Git是一个免费的&#xff0c;开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目&#xff0c;Git易于学习&#xff0c;占用空间小&…

供应链 | 顶刊OR论文精读:在线最小峰值作业调度的竞争算法

Competitive Algorithms for the Online Minimum Peak Job Scheduling 本文为OR期刊论文&#xff0c;原文信息&#xff1a; Clia Escribe, Michael Hu, Retsef Levi (2023) Competitive Algorithms for the Online Minimum Peak Job Scheduling. Operations Research. Article…

ZYNQ学习之PetaLinux开发环境搭建

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ FTP&#xff1a;File Transfer Protocol 一、Ubuntu 和 Windows 文件互传 1.1、开启 Ubu…

【git分支管理策略】如何高效的管理好代码版本

目录 1.分支管理策略 2.我用的分支管理策略 3.一些常见问题 1.分支管理策略 分支管理策略就是一些经过实践后总结出来的可靠的分支管理的办法&#xff0c;让分支之间能科学合理、高效的进行协作&#xff0c;帮助我们在整个开发流程中合理的管理好代码版本。 目前有两套Git…

【线段树】第十三届蓝桥杯省赛C++ A组 Java C组 Python A组/B组《最长不下降子序列》(C++)

【题目描述】 给定一个长度为 N 的整数序列&#xff1a;,,⋅⋅⋅,。 现在你有一次机会&#xff0c;将其中连续的 K 个数修改成任意一个相同值。 请你计算如何修改可以使修改后的数列的最长不下降子序列最长&#xff0c;请输出这个最长的长度。 最长不下降子序列是指序列中的…

python每日分析练习:产品季度销售的比较分析

这次我们将关注一家零售公司的季度销售分析。 假设场景 一家零售公司希望分析其过去一年内各季度的销售表现&#xff0c;以便更好地理解其业务趋势&#xff0c;评估不同产品类别的表现&#xff0c;并优化未来的销售策略。 分析目的 理解季度销售趋势&#xff1a;分析公司整体…

Mac 装 虚拟机 vmware、centos7等

vmware&#xff1a; https://www.vmware.com/products/fusion.html centos7 清华镜像&#xff1a; 暂时没有官方的 m1 arm架构镜像 centos7 链接: https://pan.baidu.com/s/1oZw1cLyl6Uo3lAD2_FqfEw?pwdzjt4 提取码: zjt4 复制这段内容后打开百度网盘手机App&#xff0c;操…

C语言例4-7:格式字符f的使用例子

%f&#xff0c;实型&#xff0c;小数部分为6位 代码如下&#xff1a; //格式字符f的使用例子 #include<stdio.h> int main(void) {float f 123.456;double d1, d2;d11111111111111.111111111;d22222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n&qu…

服务运营|香港大学雷骁:收益管理中价格歧视的公平性

编者按&#xff1a; INFORMS George B. Dantzig Dissertation Award 用于表彰运筹学和管理科学领域中具有创新性和实用性的最佳毕业设计。香港大学助理教授雷骁题为“Revenue Management in Video Games and With Fairness” 是这一奖项2023年度的提名者之一。 这篇毕业设计重…

github vscode 笔记

目录 前言1. 新建代码库2. 下载代码到本地3. 更新代码并上传到github 前言 github方便多人协作维护代码。该笔记记录了下面三个过程&#xff1a; 在github上新建代码库&#xff0c;下载代码到本地&#xff0c;将更新代码并上传到github 1. 新建代码库 2. 下载代码到本地 链…

中国赛道领跑之争:安踏将耐克越甩越远

一双鞋、一件衣服每被穿一次&#xff0c;消费者就会把它背后的品牌和自身的体验联系起来&#xff0c;做出评判。所以&#xff0c;如果说有什么领域能充分展示国产品牌的发展进步&#xff0c;鞋服一定包含在内&#xff0c;尤其是强调专业性的体育运动市场。 一年前的2023年3月&…

【Python版】手把手带你如何进行Mock测试

什么是mock&#xff1f; mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为&#xff0c;很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock&#xff1f; 之所以使用mock测试&#xff0c;是因为真…

uniapp微信小程序_computed_计算BMI

一、computed的用法还有它是什么&#xff1f; 首先它叫计算属性&#xff0c;顾名思义他是用来计算属性&#xff0c;计算你在data模板上定义的属性&#xff08;其实在插值表达式也能直接计算但是首先太长了在{{}}里面写那么多不好看&#xff0c;还有其他特点我在下面一起说&…

paramiko,一个强大的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个强大的 Python 库 - paramiko。 Github地址&#xff1a;https://github.com/paramiko/paramiko 在网络编程中&#xff0c;远程操作是一项非常常见的需求&#xff0c;特别是…

[Java基础揉碎]抽象类

目录 通过问题引出 介绍 关键点 细节 ​编辑 抽象类的最佳设计模式--模版设计模式 1.先用最容易想到的方法 2.分析问题&#xff0c;提出使用模板设计模式 通过问题引出 假如我们有个动物类, 动物都有eat吃的方法, 但是具体吃什么, 我们不知道, 因为是什么动物我们不知道…

Camtasia Studio 2024:视频编辑与制作的新里程碑及需要下载吗

Camtasia Studio 2024&#xff1a;视频编辑与制作的新里程碑 在数字化时代&#xff0c;视频已经成为人们获取信息、娱乐和学习的主要方式之一。为了满足这一需求&#xff0c;视频编辑和制作软件也在不断发展和创新。Camtasia Studio 2024作为一款功能强大的视频编辑软件&#…

GIS+Python:地质灾害风险评价的智能化解决方案

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

3-Flume之拦截器与GangLia监控

Flume Interceptor 概述 Interceptor(拦截器)本身是Source的子组件之一&#xff0c;可以对数据进行拦截、过滤、替换等操作不同于Selector&#xff0c;一个Source上可以配置多个Interceptor&#xff0c;构成拦截器链。需要注意的是&#xff0c;后一个拦截器不能和前一个拦截…

芒果YOLOv8改进130:Neck篇,即插即用,CCFM重构跨尺度特征融合模块,构建CCFM模块,助力小目标检测涨点

芒果专栏 基于 CCFM 的改进结构,改进源码教程 | 详情如下🥇 💡本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 即插即用 结构。博客 包括改进所需的 核心结构代码 文件 YOLOv8改进专栏完整目录链接:👉 芒果YOLOv8深度改进教程 | 🔥 订阅一个…

HarmonyOS 健康系统联系案例 创建项目

上文 HarmonyOS 健康系统联系案例 整体原型图介绍 我们 介绍了健康系统的整体 UI 然后 我们一点一点来 今天先搭个环境 首先 我们打开开发工具首页 创建项目 一个非常令人怀念的步骤啊 我们点击 Create Project 创建一个新的工程 模板 还是选最基础的 Empty Ability 然后 …