建器架構(gòu)的十年演進(jìn))
開發(fā)工具CLI文檔【免費(fèi)下載鏈接】conventional-changelogGenerate changelogs and release notes from a projects commit messages and metadata.項(xiàng)目地址https://gitcode.com/gh_mirrors/co/conventional-changelog點(diǎn)擊查看免費(fèi)下載本文以 standard-changelog 的 CHANGELOG 為核心完整梳理這個(gè)包從 2016 年 1 月初始化0.0.1到 2026 年 7 月8.1.0的全部版本變更、各次破壞性變更的遷移影響并結(jié)合當(dāng)前倉庫源碼給出 8.x 版本的完整 CLI 參數(shù)與 JS API 用法。讀完本文你可以準(zhǔn)確判斷從舊版本升級需要處理哪些斷點(diǎn)并掌握在 Node.js 22 環(huán)境下用 Angular 提交約定生成 CHANGELOG 的兩種方式。什么是 standard-changelogstandard-changelog的定位可以用一句話說清它是conventional-changelog生成器內(nèi)置了 Angular 提交約定預(yù)設(shè)的版本讀取 git 歷史后生成CHANGELOG.md把提交自動(dòng)歸組為 Features、Bug Fixes、Performance Improvements 等小節(jié)。與通用conventional-changelog的唯一區(qū)別是無需安裝或選擇預(yù)設(shè)——它永遠(yuǎn)使用 Angular 預(yù)設(shè)見 README 與 文檔站入口頁。從當(dāng)前倉庫的 package.json 可以確認(rèn) 8.1.0 的關(guān)鍵事實(shí)type: moduleESM-only 包engines.node: 22即要求 Node.js 22 或更高運(yùn)行時(shí)依賴僅三個(gè)工作區(qū)包c(diǎn)onventional-changelog/git-client、conventional-changelog-angular預(yù)設(shè)、conventional-changelog核心生成器發(fā)布時(shí)掛載standard-changelog命令publishConfig.bin。十年版本時(shí)間線2016–2026以下各節(jié)內(nèi)容均直接來自 CHANGELOG.md按年代分段歸納。2016–2018初始化與 2.0 里程碑0.0.12016-01-30初始版本CHANGELOG 記錄其初始化關(guān)閉了上游 conventional-changelog 倉庫的 issue #84——這個(gè)包從誕生起就是 conventional-changelog 工具鏈的一部分。1.0.0 → 1.0.192017-03-11 至 2018-04-161.x 系列共 19 個(gè)版本CHANGELOG 中均為 Version bump only 條目無獨(dú)立功能記錄屬于跟隨 monorepo 聯(lián)動(dòng)的維護(hù)期。2.0.02018-05-29唯一的 2.x 早期重大變更是把包最低 Node 版本要求定為當(dāng)時(shí) Node 發(fā)布工作組支持的最老 LTS即 Node 6處于 Maintenance LTS 階段構(gòu)成一次破壞性變更。2.0.22018-11-01升級 Lerna 3修復(fù) Node.js v11 下的錯(cuò)誤issue #385。2018–20202.0.x 長期維護(hù)期2.0.3 到 2.0.272018-11-01 至 2020-11-05是典型的 monorepo 聯(lián)動(dòng)維護(hù)期大量條目只有 Note:Version bump only for package standard-changelog但其中幾個(gè)安全/依賴類修復(fù)值得關(guān)注版本日期修復(fù)內(nèi)容2.0.122019-05-18figures 升級到 v3#4532.0.142019-10-02tempfile 升級到 v3#4592.0.162019-10-24rimraf 升級到 v3#514修復(fù) lodash 安全漏洞#5352.0.182019-11-14為 CLI flags 補(bǔ)充 TypeScript 類型#5512.0.232020-05-08yargs-parser 遷移出被標(biāo)記存在漏洞的版本#635可以看到這條維護(hù)期的主線是依賴安全加固與CLI 類型補(bǔ)全包本身行為穩(wěn)定。2023三次重大架構(gòu)版本3.0.0 / 4.0.0 / 5.0.02023 年 5 月到 9 月間連續(xù)發(fā)布了 3.0.0、4.0.0、5.0.0 三個(gè)破壞性版本是這個(gè)包歷史上變化最密集的時(shí)期3.0.02023-06-06要求 Node 14CLI 工具開始支持Lerna 風(fēng)格的pkgversion標(biāo)簽#175補(bǔ)充 CLI flags 類型#551重構(gòu)中盡可能移除 lodash 依賴#959。4.0.02023-08-26要求 Node 16所有預(yù)設(shè)統(tǒng)一改為導(dǎo)出預(yù)設(shè)配置工廠函數(shù)conventional-changelog-preset-loader新增loadPreset與createPresetLoader兩個(gè)導(dǎo)出。CHANGELOG 特別說明如果你的項(xiàng)目只是按名字間接引用預(yù)設(shè)則無需改配置升級包即可。另外從 chalk 遷移到 picocolors#1074并修復(fù)了 semver 漏洞#1071關(guān)閉 #1019。5.0.02023-09-08回調(diào)全面 Promise 化。與 standard-changelog 直接相關(guān)的是其createIfMissing方法從此返回 Promise同批次的git-semver-tags、conventional-recommended-bump包gitSemverTags、conventionalRecommendedBump函數(shù)也改為返回 Promise#1111、#1112。2024–2026ESM-only、Builder API 與手動(dòng)提交范圍6.0.02024-04-26要求 Node 18除gulp-conventional-changelog外所有包轉(zhuǎn)為 ESM-onlyCJS → ESM 遷移#1144修復(fù)了 config 加載問題#1234meow 升級到 v13#1190。7.0.02025-05-19核心架構(gòu)合并——conventional-changelog-core與conventional-changelog-cli兩個(gè)包并入conventional-changelog同時(shí)引入全新 Builder API 與更新后的 CLI flags#1352。7.0.1 是同日的構(gòu)建修復(fù)。當(dāng)前 src/index.ts 中StandardChangelog extends ConventionalChangelog的繼承關(guān)系就是這一合并的產(chǎn)物。8.0.02026-06-26要求Node.js 22 或更高新增手動(dòng)提交范圍支持#1486即 CLI 的--from/--to參數(shù)。8.0.12026-07-04把包的 homepage 與文檔指向遷移到文檔網(wǎng)站。8.1.02026-07-09CLI 參數(shù)解析從meow替換為argue-cli#1505。當(dāng)前 cli.ts 中的readFlags()/runProgram()即替換后的驅(qū)動(dòng)方式。破壞性變更與升級要點(diǎn)把上表按版本壓縮成升級決策清單版本破壞性變更升級時(shí)需要做的事2.0.0最低 Node 提至 6當(dāng)時(shí)最老 LTS確認(rèn) Node 版本3.0.0要求 Node 14確認(rèn) Node 版本4.0.0要求 Node 16預(yù)設(shè)接口改為工廠函數(shù)preset-loader 新增loadPreset/createPresetLoader按名字引用預(yù)設(shè)則無需改配置直接使用預(yù)設(shè)對象的調(diào)用方需適配工廠函數(shù)5.0.0createIfMissing等 API 返回 Promise用回調(diào)寫的調(diào)用代碼要改為await6.0.0要求 Node 18包為 ESM-onlyrequire()調(diào)用需改import7.0.0core/cli 并入conventional-changelogBuilder API 與 CLI flags 全面更新從舊包遷移導(dǎo)入改用StandardChangelog構(gòu)建器 API 與新 flags8.0.0要求 Node.js 22升級 Node 運(yùn)行時(shí)需要說明的適用前提7.0.0 起 CLI flags 的變化意味著 6.x 時(shí)代腳本里使用的舊參數(shù)名在 7.x/8.x 下不再有效遷移時(shí)應(yīng)以standard-changelog --help輸出和當(dāng)前 cli.ts 中的參數(shù)清單為準(zhǔn)。當(dāng)前版本8.x的 CLI 用法README 給出的最小用法是standard-changelog它基于自上一個(gè) semver 標(biāo)簽以來的提交按 Feature、Fix、Performance Improvement、Breaking Changes 模式匹配并生成 changelog。完整參數(shù)清單來自 cli.ts 的 HELP 文本如下參數(shù)說明-i, --infile從此文件讀取 CHANGELOG默認(rèn)CHANGELOG.md-o, --outfile將 CHANGELOG 寫入此文件默認(rèn)同 infile--stdout輸出結(jié)果到 stdout 而不是寫文件-p, --preset要使用的預(yù)設(shè)名默認(rèn)angular-k, --pkgpackage.json的路徑默認(rèn)最近的 package.json-a, --append新版本記錄追加在舊版本之前/之后默認(rèn)false-f, --first-release首次生成 CHANGELOG-r, --release-count從最新開始生成多少個(gè)版本默認(rèn) 1為 0 時(shí)重建整個(gè) CHANGELOG 并覆蓋輸出文件--skip-unstable跳過不穩(wěn)定標(biāo)簽如x.x.x-alpha.1、x.x.x-rc.2-u, --output-unreleased輸出尚未發(fā)布的unreleasedchangelog-v, --verbose詳細(xì)輸出用于調(diào)試默認(rèn)false-n, --config自定義配置腳本的路徑-c, --context定義模板變量的 JSON 文件路徑-l, --lerna-package為指定 Lerna 包:pkg-name1.0.0生成 changelog-t, --tag-prefix讀取標(biāo)簽時(shí)使用的標(biāo)簽前綴--commit-path將 changelog 限定到特定目錄--from提交范圍起點(diǎn)標(biāo)簽或 SHA8.0.0 起支持--to提交范圍終點(diǎn)標(biāo)簽或 SHA8.0.0 起支持高頻場景示例來自 文檔站# 首次引入工具時(shí)一次性重建完整歷史覆蓋輸出文件 standard-changelog -r 0 # 只生成指定提交范圍內(nèi)的記錄 standard-changelog --from v1.0.0 --to HEAD # 預(yù)覽結(jié)果而不寫文件 standard-changelog --stdout這些 CLI 行為都有測試佐證cli.spec.ts 覆蓋了 infile/outfile 的各種組合追加/覆蓋、文件缺失時(shí)自動(dòng)創(chuàng)建、-k指定 package.json、--context相對/絕對路徑、--first-release以及 context 文件缺失時(shí)退出碼為 1 并報(bào)錯(cuò)等場景。當(dāng)前版本的 JS API 用法standard-changelog是 ESM-only 包API 入口為 src/index.tsimport { ConventionalChangelog } from conventional-changelog import angular from conventional-changelog-angular export * from conventional-changelog export class StandardChangelog extends ConventionalChangelog { constructor(cwdOrGitClient: string | ConventionalGitClient) { super(cwdOrGitClient) this.config(angular()) } }可以清楚看到它的實(shí)現(xiàn)方式繼承核心ConventionalChangelog構(gòu)建器在構(gòu)造函數(shù)中直接注入angular()預(yù)設(shè)配置并完整 re-exportconventional-changelog的所有內(nèi)容packagePrefix等輔助函數(shù)也可從standard-changelog導(dǎo)入。典型用法是惰性構(gòu)建器鏈——配置方法只是排隊(duì)參數(shù)并返回this直到迭代write()或讀取writeStream()時(shí)才真正訪問 git見 API 文檔import { StandardChangelog } from standard-changelog const generator new StandardChangelog(process.cwd()) .readPackage() for await (const chunk of generator.write()) { process.stdout.write(chunk) }也可以走流式寫法README 示例const generator new StandardChangelog() .readPackage() generator .writeStream() .pipe(process.stdout)繼承自ConventionalChangelog的構(gòu)建器方法包括loadPreset()覆蓋內(nèi)置 Angular 預(yù)設(shè)、config()、readPackage(path?, transform?)、package(pkg)、readRepository()、repository(infoOrGitUrl)、tags(params)、commits(params, parserOptions?)、options(options)、context(context)、writer(params)、write(includeDetails?)與writeStream(includeDetails?)。其中commits({ from, to })就是 8.0.0 手動(dòng)提交范圍的 API 形態(tài)。在 ConventionalChangelog.ts 中可以看到支撐這些行為的底層實(shí)現(xiàn)構(gòu)造函數(shù)默認(rèn)releaseCount: 1、append: falseL62-L79getCommits()里isManualRange Boolean(commits.to (commits.from || commits.to ! HEAD))正是--from/--to的判定邏輯手動(dòng)范圍下直接按范圍取提交否則按 semver 標(biāo)簽切片L251-L336write()按取標(biāo)簽 → 定稿 context → 定稿 writer 選項(xiàng) → 取提交 → 轉(zhuǎn)換 → 寫入的順序產(chǎn)出每個(gè)版本的 Markdown 塊L584-L609。結(jié)語從 CHANGELOG 可以讀出 standard-changelog 清晰的演進(jìn)主軸2016–2020 年以依賴安全維護(hù)和 monorepo 聯(lián)動(dòng)版本為主2023 年完成 Node 版本收緊、預(yù)設(shè)工廠接口統(tǒng)一與 Promise 化三連2024 年轉(zhuǎn)入 ESM-only2025–2026 年通過 core/cli 包合并落地 Builder API并在 8.0.0 將最低 Node 要求提到 22、新增手動(dòng)提交范圍。對于維護(hù)既有項(xiàng)目的團(tuán)隊(duì)按上文破壞性變更表逐版對照即可規(guī)劃遷移對于新項(xiàng)目則直接以 8.x 的standard-changelog命令與StandardChangelog構(gòu)建器 API 為起點(diǎn)配合 Angular 提交約定即可自動(dòng)維護(hù) CHANGELOG。贊分享開發(fā)工具CLI文檔【免費(fèi)下載鏈接】conventional-changelogGenerate changelogs and release notes from a projects commit messages and metadata.項(xiàng)目地址https://gitcode.com/gh_mirrors/co/conventional-changelog點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Prometheus Operator 版本演進(jìn)全解從 CHANGELOG 讀懂十年 CRD 架構(gòu)迭代2016—2026Prometheus Operator 版本演進(jìn)全解從 CHANGELOG 讀懂十年 CRD 架構(gòu)迭代2016—2026 本文以倉庫根目錄 CHANGEL云原生可觀測性plotly.py CHANGELOG 深度解讀從 7.x 新特性到十年版本演進(jìn)plotly.py CHANGELOG 深度解讀從 7.x 新特性到十年版本演進(jìn) plotly.py 是 Python 生態(tài)中最流行的交互式繪圖庫之一其 C數(shù)據(jù)可視化數(shù)據(jù)分析android-gif-drawable架構(gòu)演進(jìn)史從初始版本到現(xiàn)在的變革android gif drawable架構(gòu)演進(jìn)史從初始版本到現(xiàn)在的變革 你是否曾為Android應(yīng)用中的GIF動(dòng)畫卡頓、內(nèi)存占用過高而煩惱是否在尋找一個(gè)高圖像處理移動(dòng)開發(fā)上一篇GCDWebServer WebDAV服務(wù)器終極指南輕松搭建個(gè)人云存儲(chǔ)服務(wù) 下一篇Toasty核心功能深度解析錯(cuò)誤、成功、警告、信息Toast的使用技巧創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考