能,但前提是 git 提交符合 conventional commits 规范;脚本需裸调 git log 解析 type(scope): description 结构,映射为中文 markdown 日志,精准插入 changelog.md 头部下方,且须配合 commit 模板与 pre-commit hook 保障规范落地。

能,但前提是你的 Git 提交符合 Conventional Commits 规范(比如 feat(api): add user login),否则 Node 脚本没法可靠识别类型、提取内容。直接硬解析自由格式的 commit message 会漏、会错、维护成本高。
用 Node 脚本读取 git log 并分类提取 commit
核心是调用 git log 命令拿到原始提交记录,再用正则匹配 type(scope): description 结构。不要依赖第三方库(如 simple-git)做抽象封装——它在 CI 或无 GUI 环境下常因路径/权限问题失败,裸调 child_process.execSync 更稳。
-
git log --pretty=format:"%s" v1.2.0..HEAD只取从上个 tag 到当前 HEAD 的 subject 行,避免杂信息干扰 - 正则必须用
^(\w+)(\([^)]*\))?:\s*(.+),支持带 scope(如feat(auth): ...)和不带 scope(如fix: ...)两种写法 - 忽略以
revert:、merge:开头的提交,它们不是有效变更项
按 type 映射成中文标题并生成 Markdown 片段
映射表要精简,只保留团队实际使用的 type,别照搬 cz-conventional-changelog 全套。例如你项目从不用 perf,就别加进去,否则脚本会为没人写的 type 留空组,显得日志松散。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
-
feat→✨ 新功能、fix→? 修复问题是刚需;refactor和chore是否单列,取决于团队是否真区分这两类工作 - 每条 message 提取后应 trim() 并过滤空行,防止
-这种无效条目混入输出 - 生成时用
## [v1.3.0](https://github.com/xxx/compare/v1.2.0...v1.3.0)格式写版本标题,方便 GitHub 自动渲染比较链接
追加到 CHANGELOG.md 且保持头部不变
别全量重写文件——那样会丢掉手写的引言、贡献说明或旧版手动补充内容。正确做法是:读取原文件,找到第一个 ## 标题位置,把新内容插在它前面。
- 用
fs.readFileSync读整个文件,用content.indexOf('\n## ')定位插入点,比逐行扫描快且不易错 - 插入前确保新内容末尾有空行,否则和上一版标题连在一起(如
v1.2.0## v1.3.0) - 写入前校验目标文件是否存在,不存在就先创建带基础头部(如
# Changelog)的空文件,避免脚本崩在 fs.writeFile
真正难的不是写脚本,而是让所有人提交时真的写 feat(api): ...。没约束的 commit 模板和 pre-commit hook,Node 脚本再健壮也只是一堆精准解析垃圾数据的代码。










