当前位置: 首页 > news >正文

monorepo 发布库 --- 发布

目录

版本控制和发布

为什么要使用changesets

添加changesets

初始化

成changeset文件

发布正式版本

将 Changesets 与 Turborepo 一起使用

npm publish发布到在线仓库时,提示:Scope not found


版本控制和发布

在 monorepo 中手动版本控制和发布包可能很繁琐。 幸运的是,有一个工具可以简化操作 - Changesets CLI。

我们推荐 Changesets,因为它使用直观,并且 - 就像 Turborepo 一样 - 符合你已经习惯的 monorepo 工具。

一些替代方案是

  • intuit/auto - 基于拉取请求上的语义版本标签生成发布
  • microsoft/beachball - 最阳光的语义版本提升器

一旦你的包被打包,你就可以将其发布到 npm 注册表。

我们建议查看 Changesets 文档。 这是我们推荐的阅读顺序

为什么要使用changesets

changesets旨在简化您的工作流程,允许贡献者在贡献过程中做出关键决策。changesets包含两条关键信息:版本类型(遵循semver 规范)以及要添加到变更日志的变更信息。

本指南旨在帮助软件包维护者添加变更集。有关贡献者的信息,请参阅添加变更集。

初始化后的整体工具应该会进入如下循环:

  1. 每次变更都会添加变更集
  2. 当发布准备就绪时运行版本命令,并验证更改
  3. 随后运行发布命令。

后两个步骤可以作为 CI 过程的一部分。

添加changesets

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

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

初始化

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

pnpm changeset init
{"$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json","changelog": "@changesets/cli/changelog","commit": false,"fixed": [],"linked": [],"access": "restricted","baseBranch": "main","updateInternalDependencies": "patch","ignore": []
}
  • commit:为 true 时,在执行 change 和 version 命令时,将自动执行提交代码操作
  • fixed:用于 monorepo 中对包进行分组,相同分组中的包版本号将进行绑定,每次执行 version 命令时,同一分组中的包只要有一个升级版本号,其他会一起升级。支持使用正则匹配包名称。
  • linked:和 fixed 类似,也是对 monorepo 中对包进行分组,但是每次执行 version 命令时,只有和 changeset 声明的变更相关的包才会升级版本号,同一分组的变更包的版本号将保持一致。支持使用正则匹配包名称。
  • access:如果配置为 restricted,将作为私有包发布,如果为 public,则发布公共范围包。
  • baseBranch:仓库主分支。该配置用于计算当前分支的变更包并进行分类。
  • updateInternalDependencies:用于声明更新内部依赖的版本号规则。当执行 version 命令升级版本号时,默认会自动更新仓库中使用该包的依赖声明。配置该字段为 minor 后,如果升级版本号为 patch 类型,将不会自动更新引用依赖声明。
  • changelog:配置为 false 时,执行 version 命令时,在 CHANGELOG.md 文件中只声明版本号,不声明其他 Changelog 信息。
  • ignore:用于声明执行 version 命令时忽略的包,和 version 命令的 --ignore 参数用法一致,注意两者不能同时使用。

成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 文件是会被自动消耗掉的。

发布正式版本

修改版本号

pnpm changeset version

这会消费所有changeset,并根据这些changeset更新到最合适的 semver 版本。它还会为每个消费的changeset写入变更日志。 我们建议在此步骤中同时检查软件包的变更日志条目和版本变更。一旦您确信这些信息无误,并对变更日志进行了必要的调整,您就可以发布您的软件包了:

发布

pnpm changeset publish

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

不需要发布的包可以在 package.json 中设置

设置为私有包

{"private": true
}

将 Changesets 与 Turborepo 一起使用

一旦你开始使用 Changesets,你将可以访问三个有用的命令

# Add a new changeset
changeset# Create new versions of packages
changeset version# Publish all changed packages to npm
changeset publish

将你的发布流程链接到 Turborepo 可以使组织你的部署更简单快捷。

我们的建议是将 Changesets 配置为自动提交 changeset version 的更改

{// …"commit": true// …
}

并在你的根 package.json 中添加一个 publish-packages 脚本

{"scripts": {// Include build, lint, test - all the things you need to run// before publishing"publish-packages": "turbo run build lint test && changeset version && changeset publish"}

如果你的包是公开的,请将 Changeset 的 access 设置为 public

{// …"access": "public"// …
}

我们推荐 publish-packages,这样它就不会与 npm 的内置 publish 脚本冲突。

这意味着当你运行 publish-packages 时,你的 monorepo 会被构建、linted、测试和发布 - 并且你将受益于 Turborepo 的所有加速功能。

npm publish发布到在线仓库时,提示:Scope not found

你也可以去除@ 不使用Scope包 注意不包名也不支持有大写名字

npm notice npm ERR! code E404 npm ERR! 404 Not Found - PUT https://registry.npmjs.org/@xxx%2fxxx - Scope not found npm ERR! 404 npm ERR! 404 '@xxx/xxx@0.0.0' is not in this registry. npm ERR! 404 You should bug the author to publish it (or use the name yourself!) npm ERR! 404 npm ERR! 404 Note that you can also install from a npm ERR! 404 tarball, folder, http url, or git url. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\Administrator\AppData\Local\npm-cache\_logs\2021-12-06T14_56_55_018Z-debug.log

这是由于包名是`@xxx/xxx`形式造成的。如果包名是`@`开头,需要到npm官网先创建一个组织。

**具体步骤如下:**

1. 注册`npm`官网账号,并且进入个人中心

2. 看到页面左侧菜单栏,点击后面的加号

3. 进入创建组织页面,输入组织名称。(这里不需要加上`@`符号)

如果组织名称已经存在页面会提示:

 4. 再次执行`npm publish`命令,这是就可以正常发布。

http://www.xdnf.cn/news/1113571.html

相关文章:

  • 在 Microsoft Edge 中,你可以使用 IE 兼容模式(Internet Explorer Mode)来运行 IE 内核 的网站。
  • DH(Denavit–Hartenberg)矩阵
  • 范畴论重构三生原理的具体案例?
  • AI(学习笔记第五课) 使用langchain进行AI开发 load documents(web)
  • python基础知识pip配置pip.conf文件
  • 开发语言中关于面向对象和面向过程的笔记
  • python 虚拟环境 Anaconda Miniconda
  • AI 编程工具 Claude Code 实战
  • MSVCP*.dll、vcruntime*.dll缺失或损坏,以及.NET Framework相关问题,解决办法
  • .NET + WPF框架开发聊天、网盘、信息发布、视频播放功能
  • 以太坊应用开发基础:从理论到实战的完整指南
  • [Subtitle Edit] 字幕格式处理 | .Net依赖管理(NuGet)
  • 【机器学习】反向传播如何求梯度(公式推导)
  • 前端面试十二之vue3基础
  • Vue Router 完全指南:从入门到实战,高效管理前端路由
  • 一文读懂现代卷积神经网络—使用块的网络(VGG)
  • 一扇门铃,万向感应——用 eventfd 实现零延迟通信
  • 【Qt开发】Qt的背景介绍(一)
  • 一文打通MySQL任督二脉(事务、索引、锁、SQL优化、分库分表)
  • Linux驱动开发2:字符设备驱动
  • [特殊字符] Python自动化办公 | 3步实现Excel数据清洗与可视化,效率提升300%
  • Excel的学习
  • Chrome浏览器此扩展程序已停用,因为它已不再受支持,插件被停用解决方案
  • 深度剖析:std::vector 内存机制与 push_back 扩容策略
  • 算法入门--动态规划(C++)
  • 【Linux系统】进程状态 | 进程优先级
  • Flask中的路由尾随斜杠(/)
  • 博客项目 laravel vue mysql 第五章 标签功能
  • Docker 搭建本地Harbor私有镜像仓库
  • 音视频学习(三十八):像素与位深