移除/忽略Istanbul覆盖率报告页脚时间戳及Lerna发布问题
解决Lerna Monorepo中覆盖率报告时间戳导致的提交污染问题
我之前也碰到过完全一样的坑——用Lerna管理多包仓库时,ava+nyc和jest生成的覆盖率报告里总带个随时间变化的注释行,每次跑测试都要改一堆coverage文件,Git提交记录乱得不行,还搞得Lerna没法准确识别哪些包真的需要更新。下面分两种工具栈给你具体解决办法:
针对使用Ava + Nyc的包
Nyc(也就是背后的Istanbul)默认会在覆盖率报告里添加带时间戳的注释,要关掉这个很简单:
- 在对应包的
package.json里添加nyc配置:
"nyc": { "report-comment": false }
- 如果你用单独的
.nycrc配置文件,就写:
{ "report-comment": false }
这样再运行nyc ava时,生成的coverage文件里就不会出现那行带时间戳的注释了。
针对使用Jest的包
Jest的覆盖率报告默认也会带时间戳,只要给覆盖率报告器加个配置就能关掉:
不管你是用package.json里的jest字段,还是单独的jest.config.js文件,都可以这么写:
// jest.config.js示例 module.exports = { // 其他配置... coverageReporters: [ ['lcov', { noTimestamp: true }], 'json-summary', 'text' ] }
这样生成的lcov报告就不会包含时间戳行,也就不会每次都产生无意义的文件变更了。
通用兜底方案:Git忽略覆盖率文件
如果上面的配置你暂时没法全量修改,或者某些老版本工具不支持,还有个省心的兜底办法:
- 在每个包的
.gitignore里添加:coverage/ - 或者在根目录的
.gitignore里一次性忽略所有子包的覆盖率文件:packages/*/coverage/
这样Git会直接忽略所有coverage文件夹,自然不会有这些文件的提交记录。不过这个方案的缺点是本地没法追踪覆盖率文件的变化,适合CI负责收集覆盖率数据的场景。
额外优化:让Lerna直接忽略覆盖率文件变更
如果你不想忽略coverage文件,除了去掉时间戳,还可以给Lerna加配置,让它直接无视coverage文件的变化:
在根目录的lerna.json里添加:
"ignoreChanges": [ "**/coverage/**", "**/*.md" ]
这样即使coverage文件有变更,Lerna也会忽略这些变化,不会误触发包的版本更新。
内容的提问来源于stack exchange,提问作者ThomasReggi
相关产品推荐
相关产品推荐

