Jest在NPM工作区中找不到@proj/pkg2模块的问题求助
解决NPM工作区中Jest无法找到内部包的问题
核心原因
Jest默认不会自动识别NPM工作区的软链接映射,测试时需明确配置模块解析规则,才能定位到@proj/pkg2这类内部包的源码或编译产物。
解决方案
方案1:配置Jest模块映射(最直接)
修改packages/pkg1/jest.config.js,添加moduleNameMapper字段,将@proj/pkg2直接映射到其源码路径:
/** @type {import('ts-jest').JestConfigWithTsJest} */ module.exports = { preset: 'ts-jest', testEnvironment: 'node', // 单个包的精准映射 moduleNameMapper: { '^@proj/pkg2$': '<rootDir>/../pkg2/src/c2.ts' }, // 多内部包的通用规则(可选) // moduleNameMapper: { // '^@proj/(.*)$': '<rootDir>/../$1/src' // } };
方案2:完善pkg2的package.json配置
确保packages/pkg2/package.json正确声明入口文件,让Jest能通过包名直接解析:
{ "name": "@proj/pkg2", "version": "1.0.0", "main": "src/c2.ts", // 直接测试源码则指向src;若依赖编译产物则改为dist/c2.js "types": "src/c2.ts", // TypeScript类型声明路径 "exports": { ".": "./src/c2.ts" // ES模块规范的入口声明 } }
同时在pkg1/jest.config.js中添加模块搜索路径,让Jest能识别根目录的工作区软链接:
module.exports = { preset: 'ts-jest', testEnvironment: 'node', modulePaths: ['<rootDir>/../../node_modules', '<rootDir>/../'] };
方案3:TypeScript路径别名配合Jest解析
- 在
packages/pkg1/tsconfig.json中配置路径别名:
{ "compilerOptions": { "baseUrl": ".", "paths": { "@proj/pkg2": ["../pkg2/src/c2.ts"] } } }
- 修改
pkg1/jest.config.js,让ts-jest使用该配置解析路径:
module.exports = { preset: 'ts-jest', testEnvironment: 'node', transform: { '^.+\\.tsx?$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.json' }] } };
可选:预编译内部包(若依赖编译产物)
如果项目要求先编译TypeScript再测试,可在根目录package.json中添加预编译步骤:
{ "scripts": { "build:pkg2": "npm run build -w packages/pkg2", "test:pkg1": "npm run build:pkg2 && npm test -w packages/pkg1" } }
注意需确保pkg2的package.json包含build脚本,将源码编译到dist目录,并把main字段指向dist/c2.js。
内容的提问来源于stack exchange,提问作者Andry
相关产品推荐
相关产品推荐

