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

Monorepo中Jest+TypeScript无法识别根目录外依赖export关键字问题

Jest+TypeScript Monorepo 跨目录引用模块解析错误解决方案

问题根因

Jest 默认仅会对rootDir(即你配置的app1目录)下的代码执行转译逻辑,位于rootDir外的shared目录下的TS/ES6文件被默认排除在转译范围外,因此export等ES模块语法会被识别为非法token。

解决方案

仅需修改app1目录下的两份配置即可,无需在fe根目录新增配置,保留从app1目录启动测试的能力:

1. 修改 fe/app1/.jest.config.ts

调整如下配置项:

module.exports = {
  // 保留原有其他配置
  rootDir: '.', // 明确rootDir为当前app1目录
  // 将shared目录加入Jest的文件处理根路径
  roots: ['<rootDir>/src', '<rootDir>/../shared'],
  transform: {
    '^.+\\.(jsx?|tsx?)$': 'ts-jest'
  },
  // 解除对shared目录的转译忽略
  transformIgnorePatterns: [
    '/node_modules/',
    '!<rootDir>/../shared/' // ! 表示不匹配该路径,即不对shared目录做转译忽略
  ],
  moduleNameMapper: {
    '^@/(.*)$': '<rootDir>/src/$1',
    '^@shared/(.*)$': '<rootDir>/../shared/$1',
  },
  // 配置ts-jest允许处理rootDir外的文件
  globals: {
    'ts-jest': {
      tsconfig: '<rootDir>/tsconfig.json',
      isolatedModules: true
    }
  }
}

2. 修改 fe/app1/tsconfig.json

调整路径别名和include范围:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "paths": {
      "@/*": ["./src/*"],
      "@shared/*": ["../shared/*"] // 修正路径:相对tsconfig所在的app1目录,shared位于上级目录
    }
  },
  // 将shared目录加入TS编译范围,确保类型和语法解析正常
  "include": ["src/**/*", "../shared/**/*", "**/*.spec.ts"]
}

额外注意事项

你提供的测试代码存在两处语法笔误,修正后可避免额外报错:

  • descrube 改为正确的 describe
  • expect(someData).toBe('DUMMY')); 多了一个右括号,改为 expect(someData).toBe('DUMMY');
    修改完成后直接在app1目录下执行测试命令即可正常运行。

内容的提问来源于stack exchange,提问作者eXception

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:36:03