必须全局安装conventional-changelog-cli并确保有符合规范的提交,再通过VSCode tasks.json封装命令触发生成;首次运行需加-r 0,后续依赖tag定位新提交,插件无法可靠替代命令行。

VSCode 里怎么让 conventional-changelog 真正跑起来
它不会自动运行,VSCode 本身不内置这个能力。你得靠命令行工具 + 手动触发,或者用插件桥接。核心是:先装好 CLI,再配好 Git 提交规范,最后让 VSCode 能调用它。
常见错误现象:conventional-changelog -p angular -i CHANGELOG.md -s 报错 command not found,或生成内容为空——大概率是没提交过符合规范的 commit,或没全局安装 CLI。
- 必须全局安装:
npm install -g conventional-changelog-cli(推荐);局部安装的话,得用npx conventional-changelog-cli,但每次都要输全名 - 确保已有至少一条符合规范的提交,比如:
git commit -m "feat(api): add user login endpoint";chore、docs这类默认不进 CHANGELOG,得加-t参数才包含 - 执行前先
git add . && git commit -m "...",否则conventional-changelog只读历史,不感知暂存区
在 VSCode 里一键生成 CHANGELOG 的实操路径
没有“一键按钮”,但可以接近:用 VSCode 的 tasks.json 封装命令,再绑定快捷键或命令面板触发。
使用场景:不想切终端、想复用当前项目配置、避免每次敲一长串参数。
- 在项目根目录建
.vscode/tasks.json,内容含type: "shell"和完整命令,例如:{ "version": "2.0.0", "tasks": [{ "label": "Generate Changelog", "type": "shell", "command": "conventional-changelog -p angular -i CHANGELOG.md -s -t feat,fix,perf,breaking", "group": "build", "presentation": { "echo": true, "reveal": "always" } }] } - 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入Tasks: Run Task→ 选Generate Changelog - 注意:如果项目用了自定义 preset(如
conventional-changelog-conventionalcommits),要把-p angular换成-p conventionalcommits,否则解析失败
为什么改了 commit 却没进 CHANGELOG
不是工具坏了,是 conventional-changelog 默认只读取「上次生成日志之后」的新提交。它靠 git tag 或文件里的上一个版本号定位起点。
常见错误现象:刚写了 feat 提交,运行后 CHANGELOG 没更新;或者只看到旧条目。
- 首次运行必须加
-r 0(从全部历史开始),否则它默认找最近 tag,没 tag 就停在空处 - 后续更新前,建议先打 tag:
git tag v1.0.0,再提交新功能,再运行conventional-changelog -i CHANGELOG.md -s,这样它才知道从哪开始算“新” - 如果手动改过
CHANGELOG.md,又没删顶部的## [Unreleased]区块,工具会把它当锚点,导致重复追加——删掉该区块再重试
插件能替代命令行吗
不能完全替代。Conventional Commits、GitLens 这类插件只能帮你写规范 commit,不生成 CHANGELOG;目前没有稳定、持续维护的 VSCode 插件能可靠调用 conventional-changelog 并处理各种 preset 和配置差异。
性能 / 兼容性影响:插件若封装 CLI,本质还是起子进程,和你在终端敲一样;但一旦插件作者停止更新,Node 版本升级或 preset 变更就容易 break。
- 真想省事,不如写个简短的
package.jsonscript:"changelog": "conventional-changelog -p conventionalcommits -i CHANGELOG.md -s",然后在 VSCode 终端里npm run changelog - 别信“自动监听 commit 并更新日志”的插件——Git hook 才是正路,VSCode 插件无权拦截 push 或 commit 底层事件
- Windows 用户注意:PowerShell 对单引号支持差,
conventional-changelog -t 'feat,fix'要改成双引号或去掉引号(取决于 shell)
最易被忽略的一点:CHANGELOG 生成逻辑高度依赖 Git 历史的纯净度。如果有 squash merge、rebase 后强制推送、或非规范 commit 夹在中间,conventional-changelog 就会漏条目或截断——它不智能纠错,只机械匹配正则。



















