Nrwl/Nx jest.preset.js中如何引用projectName配置值?
在Nx Monorepo中动态配置Jest覆盖率目录的项目名称
你遇到的问题是<projectName>作为静态字符串无法被Jest自动解析,Nx提供了两种可靠的动态获取当前项目名称的方式:
方案一:使用Nx注入的环境变量
Nx在执行测试命令时会自动设置NX_TARGET_PROJECT环境变量,直接在预设文件中引用即可动态生成对应项目的覆盖率目录:
const nxPreset = require('@nrwl/jest/preset').default; module.exports = { ...nxPreset, coverageDirectory: `../../coverage/${process.env.NX_TARGET_PROJECT}`, };
执行nx test <your-project-name>后,覆盖率报告会自动生成在coverage/<your-project-name>目录下。
方案二:通过Jest配置函数动态生成(兼容旧版Nx)
如果环境变量方式不生效(比如使用较旧版本的Nx),可以将预设导出为一个函数,利用Jest的配置上下文获取项目信息:
const nxPreset = require('@nrwl/jest/preset').default; module.exports = async (jestConfig) => { const baseConfig = await nxPreset(jestConfig); // 优先从jestConfig的displayName取项目名,环境变量兜底 const projectName = jestConfig.displayName || process.env.NX_TARGET_PROJECT; return { ...baseConfig, coverageDirectory: `../../coverage/${projectName}`, }; };
这种方式更灵活,能适配不同版本的Nx和Jest配置场景。
验证方法
运行任意项目的测试命令,比如nx test my-library,检查根目录下的coverage文件夹,确认是否生成了my-library子目录且包含覆盖率报告文件。
内容的提问来源于stack exchange,提问作者Barry Michael Doyle
相关产品推荐
相关产品推荐

