changelog 模块
字数
774 字
阅读时间
4 分钟
温馨提示
本文由AI辅助生成,可能存在不准确性。
changelog模块提供了用于处理更新日志(CHANGELOG.md)的工具函数,可以提取和解析特定版本的更新说明。
提取单个版本
log
提取指定版本号的更新日志内容。
typescript
import { log } from 'node-karin'
/**
* 提取指定版本号的更新日志
* @param version 版本号,如 "1.0.0"
* @param data CHANGELOG.md文件内容
* @returns 更新日志内容,如果未找到则返回null
*/
// 读取文件内容
const changelogContent = fs.readFileSync('CHANGELOG.md', 'utf-8')
// 提取特定版本的日志
const version100Log = log('1.0.0', changelogContent)
console.log(version100Log)
提取多个版本
logs
提取指定范围版本号的更新日志内容,可以选择向前或向后提取。
typescript
import { logs } from 'node-karin'
/**
* 提取指定范围版本号的更新日志
* @param version 起始版本号
* @param data CHANGELOG.md文件内容
* @param length 提取长度,默认为1
* @param reverse 是否反向提取,默认为false(向后提取)
* @returns 合并后的更新日志内容
*/
// 读取文件内容
const changelogContent = fs.readFileSync('CHANGELOG.md', 'utf-8')
// 从1.0.0版本开始,向后提取2个版本的日志
const forwardLogs = logs('1.0.0', changelogContent, 2, false)
// 从1.0.0版本开始,向前提取2个版本的日志
const backwardLogs = logs('1.0.0', changelogContent, 2, true)
提取版本区间
range
提取两个指定版本号之间的所有更新日志内容。
typescript
import { range } from 'node-karin'
/**
* 提取指定版本号之间的更新日志
* @param data CHANGELOG.md文件内容
* @param startVersion 起始版本号
* @param endVersion 结束版本号
* @returns 合并后的更新日志内容
*/
// 读取文件内容
const changelogContent = fs.readFileSync('CHANGELOG.md', 'utf-8')
// 提取1.0.0到2.0.0之间的所有版本更新日志
const versionRangeLogs = range(changelogContent, '1.0.0', '2.0.0')
解析更新日志
parseChangelog
将更新日志解析为以版本号为键的对象结构。
typescript
import { parseChangelog } from 'node-karin'
/**
* 对更新日志进行解析并形成对象
* @param data 更新日志内容
* @returns 以版本号为键的更新日志对象
*/
// 读取文件内容
const changelogContent = fs.readFileSync('CHANGELOG.md', 'utf-8')
// 解析为对象
const changelogObj = parseChangelog(changelogContent)
// 输出所有版本号
console.log(Object.keys(changelogObj))
// 访问特定版本的更新内容
console.log(changelogObj['1.0.0'])
使用示例
typescript
import { readFile } from 'fs/promises'
import { log, range, parseChangelog } from 'node-karin'
async function getRecentChanges(changelogPath, currentVersion) {
try {
// 读取CHANGELOG.md文件
const content = await readFile(changelogPath, 'utf-8')
// 获取当前版本的更新日志
const currentChanges = log(currentVersion, content)
// 解析整个更新日志
const allChanges = parseChangelog(content)
// 获取所有版本号
const versions = Object.keys(allChanges)
// 找出比当前版本更新的版本
const newerVersions = versions.filter(v => {
const [major1, minor1, patch1] = currentVersion.split('.').map(Number)
const [major2, minor2, patch2] = v.split('.').map(Number)
return major2 > major1 ||
(major2 === major1 && minor2 > minor1) ||
(major2 === major1 && minor2 === minor1 && patch2 > patch1)
})
if (newerVersions.length > 0) {
const latestVersion = newerVersions[0]
console.log(`发现新版本: ${latestVersion}`)
console.log('更新内容:')
console.log(allChanges[latestVersion])
} else {
console.log(`当前版本 ${currentVersion} 已是最新`)
}
} catch (error) {
console.error('读取更新日志失败:', error)
}
}
<NolebaseGitChangelog />