xChar
·3 months ago

起因

虽然 VitePress 自带了读取.md文件最近更新时间的功能,但是在写文档时插入 vue 动态组件时就需要手动实现一次这个功能。
起初试图找一个相关库,发现根本没人去做。
找了半天,终于在 Xavi 的技术文档 / VitePress 扩展首页内容里面找到了实现,然后突然发现VitePress 的仓库里不就有吗?顿时想给自己来一下。

于是结合二者功能搓了一个 TS 版本的。

正文

  1. 首先引用必要的包:
import { spawn } from "cross-spawn"; //执行命令行操作 (git)
import fs from "fs-extra"; //读取文件信息 (比 node:fs 好用)
import { basename, dirname } from "path";
  1. 学官方建一个缓存:
const cache = new Map<string, [number, number]>();
  1. 剩下的看下面成品的注释把

关于 git 的 format 中的使用参数

--pretty="%ai"--pretty="%ci"的问题。
其中ai指的是author date,而ci指的是committer date
ai仅在实际作者签名时发生改变,ci会在有对该 commit 进行操作时变化。

具体来说,当你是实际贡献者并进行了一次签名时,二者均会变化 (如创建签名 修改签名历史),
而在如Git Merge 后某文件更改时,该文件的ai不变但ci变化为合并时间。

延伸阅读

故这里我们使用ai表示实际的 git 签名时间,不会受到合并的影响。

成品 (MIT 协议发布)

Link

参考/引用

不包含已在文中注明来源的链接。

  1. git-scm / Git Format 选项
  2. stackoverflow / AuthorDate 与 CommitterDate 的讨论

此文由 Mix Space 同步更新至 xLog
原始链接为 https://xrzyun.eu.org/posts/devlogs/read-git-timestamp-in-nodejs


Loading comments...