You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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解析

  1. 在packages/pkg1/tsconfig.json中配置路径别名:
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@proj/pkg2": ["../pkg2/src/c2.ts"]
    }
  }
}
  1. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:45:25