夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

    • Git使用手册
    • Markdown使用教程
    • npm常用命令
    • yarn基本命令
    • npm packageJson属性详解
    • yaml语言教程
    • Stylus预处理语言
    • Less预处理语言
    • Sass预处理语言
    • PWA运用
    • 富文本编辑器Ueditor
    • 发布npm
    • 构建一个TS的npm包
    • tsup打包工具
    • leaflet地图框架
    • pdfjs-dist使用
    • xlsx插件使用
    • changesets
      • 初始化
      • 第一次发布
      • 生成changeset文件
      • 发布测试版本
      • 发布正式版本
    • release-it
    • mathjs
  • GitHub技巧

  • 博客搭建

  • Ajax

  • Vite

  • Vitest

  • Nuxt

  • UI库文章

  • Docker

  • 技术
  • 技术文档
夜猫子
2024-10-29
目录

changesets

# changesets

changesets 主要关心 monorepo 项目下子项目版本的更新、changelog 文件生成、包的发布。

pnpm add @changesets/cli -D
1

特点

  • 在开发时,需要开发者提供本次变更涉及的包名称、升级版本类型(patch、minor、major)及变更信息,即 changeset。
  • 在发布版本时,会根据 changeset 自动升级对应包的版本号,并在对应的包中生成 Changelog 信息。
  • 在 Monorepo 场景中,changeset 会自动生成仓库依赖图,升级时只会升级变更包及相关依赖包的版本号。

# 初始化

执行 changeset init,在项目根目录下生成一个 .changeset 目录,里面会生成一个 changeset 的 config 文件

{
  "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json",
  "changelog": "@changesets/cli/changelog",
  "commit": false,
  "fixed": [],
  "linked": [],
  "access": "restricted",
  "baseBranch": "master",
  "updateInternalDependencies": "patch",
  "ignore": []
}
1
2
3
4
5
6
7
8
9
10
11
  • commit:为 true 时,在执行 change 和 version 命令时,将自动执行提交代码操作
  • fixed:用于 monorepo 中对包进行分组,相同分组中的包版本号将进行绑定,每次执行 version 命令时,同一分组中的包只要有一个升级版本号,其他会一起升级。支持使用正则匹配包名称。
  • linked:和 fixed 类似,也是对 monorepo 中对包进行分组,但是每次执行 version 命令时,只有和 changeset 声明的变更相关的包才会升级版本号,同一分组的变更包的版本号将保持一致。支持使用正则匹配包名称。
  • access:如果配置为 restricted,将作为私有包发布,如果为 public,则发布公共范围包。

提示

对于仓库中存在部分包需要配置 access,可以在 package.json 中配置 publishConfig,例如:

{
  "publishConfig": {
    "registry": "https://registry.npmjs.org/",
    "access": "public"
  }
}
1
2
3
4
5
6
  • baseBranch:仓库主分支。该配置用于计算当前分支的变更包并进行分类。
  • updateInternalDependencies:用于声明更新内部依赖的版本号规则。当执行 version 命令升级版本号时,默认会自动更新仓库中使用该包的依赖声明。配置该字段为 minor 后,如果升级版本号为 patch 类型,将不会自动更新引用依赖声明。

提示

e.g.,当配置 updateInternalDependencies 为 minor 时,升级 pkg-a 至 1.0.1 时,pkg-b 中的 pkg-a 的依赖版本将不会更新,只有 pkg-a 升级版本号为 1.1.0 或者 2.0.0 时,才会更新 pkg-b 中的 pkg-a 的依赖。

  • changelog:配置为 false 时,执行 version 命令时,在 CHANGELOG.md 文件中只声明版本号,不声明其他 Changelog 信息。
  • ignore:用于声明执行 version 命令时忽略的包,和 version 命令的 --ignore 参数用法一致,注意两者不能同时使用。

# 第一次发布

在项目根目录下直接运行下方指令为子项目发布第一个版本。发布完成后,提交代码~

pnpm run build

pnpm changeset publish
1
2
3

提示

  • @xxx/xx 形式的包会被当作私有包,默认需要以组织的方式登录,可以通过参数发布为公共包

    pnpm publish --access public
    
    1
  • changeset publish 时指定参数不生效,此时可以在 package.json 中指定配置

    {
      "publishConfig": {
        "access": "public"
      }
    }
    
    1
    2
    3
    4
    5
  • 不需要发布的包可以在 package.json 中设置

    {
      "private": true
    }
    
    1
    2
    3

# 生成changeset文件

一个 changeset 是个包含了在某个分支或者 commit 上改动信息的 md 文件,包含的内容包括:

  • 本次变更涉及哪些包的变更。
  • 本次变更需要升级的版本号类型,类型符合 semver (opens new window) 规范。
  • 本次变更的 Changelog 信息。

这个文件的本质是对包的版本和 Changelog 做一个预存储,我们也可以在这些文件中修改信息。

模块工程方案

在根目录执行 pnpm changeset add,选择本次变更需要升级的版本号类型,填入 Changelog 信息,并点击两次回车,执行完成后,将在项目的 .changeset 目录创建对应的 changeset 文件

Monorepo 工程方案

在根目录执行 pnpm changeset add,选择本次需要升级的包列表,分别选择不同版本类型对应的包,changeset 会询问版本号类型,如果存在包未选择这两种类型,将会默认使用 patch 类型,填入 Changelog 信息,并点击两次回车,执行完成后,将在项目的 .changeset 目录创建对应的 changeset 文件

提示

  • 假设现在要进行迭代,我们从主分支上切一个分支出来,完成代码修改,如果需要变更记录,执行 pnpm changeset add 命令生成 changeset 文件,最后提交代码。
  • changeset 文件需要一并提交到远程仓库中。在后续的新版本发布后,这些 changeset 文件是会被自动消耗掉的。

# 发布测试版本

  1. 进入 pre 模式

执行下方命令中的一条

pnpm changeset pre enter alpha   # 发布 alpha 版本
pnpm changeset pre enter beta    # 发布 beta 版本
pnpm changeset pre enter rc      # 发布 rc 版本
1
2
3
  1. 修改包的版本
pnpm changeset version`
1

执行后包的版本发生变化,其他项目以来的此包的版本也相应发生变化

  1. 发布测试版本
pnpm run build

pnpm changeset publish
1
2
3
  1. 退出 pre 模式

发布前退出模式

pnpm changeset pre exit
1

# 发布正式版本

  1. 修改版本号
pnpm changeset version
1
  1. 发布
pnpm changeset publish
1

changeset 会检查当前工作区中所有包的版本是否已经被发布过,如果没有则自动发布。

编辑 (opens new window)
上次更新: 2024/12/19 17:25:54
xlsx插件使用
release-it

← xlsx插件使用 release-it→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式