Node16下nyc生成覆盖率报告提示Unable to lookup source错误
问题根因
该异常是Node 16环境下旧版本nyc解析sourcemap路径的兼容bug:当转译生成的sourcemap源路径带file:///协议前缀时,nyc未正确剥离协议标识,直接将项目相对路径与带file:前缀的绝对路径拼接,最终生成格式错误的源文件路径,同时在coverage目录下生成名为file:的异常目录。
修复方案
按优先级依次尝试以下操作,每步操作后先清理缓存再验证效果:
- 升级nyc到最新稳定版本,旧版本未适配Node 16的sourcemap解析逻辑,执行安装命令:
npm install nyc@latest -D - 清理历史覆盖率缓存,删除项目根目录下的
.nyc_output、coverage两个文件夹,避免旧错误缓存影响新生成的报告。 - 若升级后问题仍存在,手动在nyc配置中显式指定源文件路径规则,关闭自动路径解析。在项目根目录新建
.nycrc文件,写入如下配置:{ "cwd": "./", "all": true, "sourceMap": false, "include": ["src/**/*.{js,ts}"], "exclude": ["node_modules/**", "**/*.test.{js,ts}"] } - 检查转译工具的sourcemap配置:如果使用TypeScript,将
tsconfig.json中的sourceRoot字段值设为"";如果使用esbuild、babel等转译工具,将sourcemap的sourceRoot参数设为空字符串,从源头避免生成带file:///协议前缀的绝对路径。
验证提示:重新生成覆盖率后,可先打开
lcov.info检查SF:开头的路径行,确认路径为纯项目相对路径、无file:前缀后,再查看html报告即可正常展示。
内容的提问来源于stack exchange,提问作者DPF
相关产品推荐
相关产品推荐

