一款非常灵活的 Changelog 日志生成工具(应用于 npm 包或应用项目中)

Changelog 生成工具

@eat-fish/changelog 是一款专用于 npm 包版本升级与 版本变更日志生成的工具, 也可以使用在应用项目中

通过提取 commit 信息来生成 CHANGELOG.md 文件

在发布新版本前使用 @eat-fish/changelog 来生成下一个版本号与 CHANGELOG 变更日志

通过自定义 commit matcher 可以实现基于 commit 提取生成或者 基于 PR 提取生成两种方式的 CHANGELOG 日志

示例项目

基于 commit 方案

通过 自定义 配置文件 matcher 函数来提取 特定 commit 生成

js 复制代码
module.exports = {
  matcher: (rawCommitInfo) => {
    const { message } = rawCommitInfo;

    // 提取 feat、fix 类型 的 commit
    const [, type, scope, description] = message.match(/(feat|fix)(?:\(([^)]*?)\))?:\s?(.+)/) || [];

    if (!type || !description) return false;

    return {
      type,
      scope,
      description,
    };
  },
};

changelog-commit-example

CHANGELOG 示例查看

基于 PR 方案

通过 自定义 配置文件 matcher 函数来提取 特定 PR commit 生成

js 复制代码
module.exports = {
  matcher: (rawCommitInfo) => {
    const { message, description: rawDescription } = rawCommitInfo;

    // 先过滤 PR 类型 commit
    const messageMatchRes = message.match(/Merge pull request #\d+ from ([^\\]+)\/(.+)/) || [];

    if (!messageMatchRes) return false;

    const [, author] = messageMatchRes;

    // 再提取 commit 信息
    const [, type, scope, description] = rawDescription.match(/(feat|fix)(?:\(([^)]*?)\))?:\s?(.+)/) || [];

    if (!type || !description) return false;

    return {
      type,
      scope,
      description,
      author,
    };
  },
};

changelog-pr-example

CHANGELOG 示例查看

使用

安装

sh 复制代码
pnpm add @eat-fish/changelog@latest -D

手动创建第一个 tag

如果是首次引入 @eat-fish/changelog, 需要先手动创建第一个 tag

使用如下命令, 创建的 tag 名为 v+ 当前 package.json 中的版本号, 例如 v1.0.0

sh 复制代码
git tag -a v1.0.0 -m "Version 1.0.0"

开始

运行前确保 没有 package.json 文件以及 CHANGELOG.md 文件的变更

然后执行升级并生成 CHANGELOG 命令

sh 复制代码
# 可以选择你想升级的版本

# fix 版本变更: 1.0.0 -> 1.0.1
pnpm changelog release patch

# feature 版本变更: 1.0.0 -> 1.1.0
pnpm changelog release minor

# feature 版本变更: 1.0.0 -> 2.0.0
pnpm changelog release major

确认无误后提交升级变更

运行完成后将自动 commit

包含 package.json 版本号变更以及 CHANGELOG.md 日志变更

确认无误后可以提交上去, 如有问题则使用以下命令撤回

sh 复制代码
git reset --hard HEAD~1

后续如果是 npm 包可以正常走 npm publish 发布

如果是应用项目则结束了

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
不悔哥2 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
家和802 天前
Carla仿真系列:4_在 Carla 的 Tesla 上装 4 路摄像头,并创建网格为环视拼接做准备
开源
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋2 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
感谢地心引力2 天前
我用 Doubao-Seed-2.1-pro 做了一个深度融入 AI 功能的本地知识库软件
ai·开源·seed·markdown·豆包
alsmile2 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
卡布鲁2 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js