每周都得发周报,挺烦的。就写一个自动生成周报的工具。
12345678# 安装
npm i -g wll8/gitday
# 例: 以 月/周/天 的形式导出报告
gitday --x-template=month-week-day
# 查看使用说明
gitday --help
先来一个功能说明:
123456789101112131415161718192021222324252627282930313233343536373839404142434445读取 git log 的数据生成类似月报/周报/日报的 markdown 文档. 参数: --help 显示使用方法 --author=[作者名称] 默认为 git config user.name 的值 --after=[时间范围] 默认为 --x-template 的最大标志日期, 例如 month-week 则自动取最近一个月. 支持 git 的参数形式 --x-template=[格式模板] 默认 week, 支持 month/week/day 或其组合 示例: gitday --x-template=month ## 2021年01月 - commitMsg - commitMsg gitday --x-template=month-week ## 2021年01月 ### 第1周 - commitMsg - commitMsg gitday --x-template=month-week-day ## 2021年01月 ### 第1周 #### 21日 星期1 - commitMsg - commitMsg gitday --x-template=week ## 2021年01月 第1周 - commitMsg - commitMsg gitday --x-template=week-day ## 2021年01月 第1周 ### 21日 星期1 - commitMsg - commitMsg gitday --x-template=day ## 2021年01月24日 - commitMsg - commitMsg
再给给大家看看来一个自动生成的月报摘录:
2022年04月
第4周
21日 星期四
- test: 并发测试
- build: 添加发布命令
20日 星期三
-
chore: 使用依赖锁文件
-
fix(test): 处理测试功能的一些错误
- MOCKM_REGISTRY 环境变量用于保证稳定的自动安装依赖
- --require 用于处理并行测试时不能正确显示 html
-
feat: 简化 --config 参数输出的内容
更改 full.mm.config.js 为 simple.mm.config.js, 让配置看起来更容易使用, 不那么吓人和混乱.
-
test: 并行运行测试
18日 星期一
- refactor: 支持传入完善的配置, 拆分测试用例
- doc: 完善更新日志
第3周
15日 星期五
-
feat: 支持从 config.api 拦截 config.db 的接口
12345678910111213141516171819202122config = { api: { '/books/:id' (req, res, next) { // 在所有自定义 api 之前添加中间件 req.body.a = 1 // 修改用户传入的数据 next() res.mm.resHandleJsonApi = (arg) => { arg.res.locals.data // json-server 原始的数据 arg.data // 经预处理的数据, 例如将分页统计放置于响应体中 arg.resHandleJsonApi // 是全局 config.resHandleJsonApi 的引用, 若无需处理则直接 return arg.data arg.data.a = 2 // 修改响应, 不会存储到 db.json return arg.resHandleJsonApi(arg) } }, }, db: { book: [ { name: `js`, }, ] }, }
12日 星期二
-
fix: config.api 是 config.proxy 的子路径并携带参数时应能覆盖
例如以下配置不应导致
/api/test?a=1
不能使用12345678config = { proxy: { '/api/': `http://172.16.203.81/api/`, }, api: { '/api/test': {msg: 123}, }, }
11日 星期一
-
index on dev: b356560 doc: 添加 todo
-
doc: 添加 todo
-
feat: 重放时特殊处理 get 携带 body 的情况
在浏览器端 get 请求是不能携带 body 的, 包括
{}
.
第2周
08日 星期五
-
refactor: 使用 undefined 更直观的表述
没有做任何事
-
fix: 处理边界情况
confg.proxy['/']
可能为对象, 当时应取对象中的 target -
refactor: 去除冗余的逻辑
-
feat: 支持禁用请求记录
第1周
01日 星期五
-
doc: update log
-
feat: 未启动进程守护时, 遇到错误连同父进程退出
-
feat: 在错误日志中保存退出码
-
fix: 重载时 global.INJECTION_REQUEST 中的值不应丢失
- server 应该把值保存在文件中, 而不是变量中
- client 应在请求时获取 INJECTION_REQUEST, 而不是刷新页面才获取
2022年03月
第5周
31日 星期四
- fix: 删除 apiWeb 中的空对象, 避免手动编辑 apiWeb 时出现重复的 key
28日 星期一
- doc: 添加 todo
好吧,有周报水了这么长的篇幅,现在到达正文。
之前造成周报的时候,很担心周报生成是否正确。经常要 git log 加上时间简单核查一下。
后面索性在 gitday 上加了一个 --x-debug
参数, 答应出每个 commit 的时间及 id,这样就能一眼看出来时间是否错误:
123456789## 2022年03月 ### 第5周 #### 31日 星期四 - 2022-03-31 16:07:45 41adea1d88b0fba0d18311f25dbf79e2e06c46ef wll8 <xwdaysme@gmail.com> fix: 删除 apiWeb 中的空对象, 避免手动编辑 apiWeb 时出现重复的 key #### 28日 星期一 - 2022-03-28 18:05:24 6b9550c92f7b222e87ea8fe9d4eb190eadaa3acd wll8 <xwdaysme@gmail.com> doc: 添加 todo
但,肯定是没有错误的啦。
为什么添加的参数那么长? --x-debug
而不是 -d
或 --debug
?因为 gitday 可以把命令参数转移给 git,所以避免参数与 git 的冲突,就弄个 --x-
前缀。
添加参数并设置默认值: false 。
现在来对参数做处理:
我们在要修改的地方添加一个函数:
为什么是添加一个函数,而不是直接在那个地方写逻辑?
因为要避免造成 git diff 时大量修改,以及避免逻辑混乱。
现在可以发现,当有此参数时,就会输出 date commit author 这些信息,没有时就是空字符串拼接。
再也不担心被发现周报是自动生成的啦。
当然,同时我也加入了一些新的功能需求:
123456789101112131415161718192021222324252627- [ ] feat: 支持输出为 html 以方便携带格式进入邮件 - [x] feat: 支持 --x-debug 模式, 以确定输出是否正确 - [ ] feat: 格式化输出 - 每个 commit 前插入一个空行 - 多行 commit 消息时再每行后面添加两个空格, 这样默认 markdown 才会显示换行效果 - 移除 commit title 与 body 之前的空行 - 移除 body 后面多于的空行 - 合并两个空行为一个 - 转换 msg 提交标志, 例如转换 `fix(client): xxx` 为 `修复 client 中的缺陷: xxx` ``` # 主要type feat: 增加新功能 fix: 修复bug # 特殊type docs: 只改动了文档相关的内容 style: 不影响代码含义的改动,例如去掉空格、改变缩进、增删分号 build: 构造工具的或者外部依赖的改动,例如webpack,npm refactor: 代码重构时使用 revert: 执行git revert打印的message # 暂不使用type test: 添加测试或者修改现有测试 perf: 提高性能的改动 ci: 与CI(持续集成服务)有关的改动 chore: 不修改src或者test的其余修改,例如构建过程或辅助工具的变动 ```
很明显,在偷懒这条路上我是越走越远,有没有要一起偷懒的?
一个优雅的写作平台