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

Jest多项目配置无法读取子目录的.babelrc与webpack.config.json

解决Monorepo中Jest与Babel的跨目录运行问题

我之前在monorepo里也碰到过一模一样的问题,给你几个针对性的解决方案:

1. 给每个子项目指定正确的rootDir

问题核心在于:当你在packages目录运行根Jest配置时,Jest默认工作目录是packages,但子项目的.babelrc、webpack.config.js都是相对自身目录的,导致路径解析完全错位。

修改根目录的jest.config.js,给每个子项目明确指定rootDir,让Jest以子项目的src目录为运行根目录:

module.exports = {
  projects: [
    {
      // 给子项目起别名,方便区分测试输出
      displayName: 'package-a',
      // 指定package-a的运行根目录为它的src文件夹
      rootDir: './a/src',
      // 复用子项目里的resolver配置
      ...require('./a/src/jest.config.js')
    },
    {
      displayName: 'package-b',
      rootDir: './b/src',
      ...require('./b/src/jest.config.js')
    }
  ]
};

这样Jest运行每个子项目测试时,会自动切换到对应的src目录,自然就能找到.babelrc和webpack.config.js了。

2. 强制Babel加载指定配置文件(解决ES6语法报错)

如果还是出现SyntaxError提示找不到.babelrc,可以在Jest的transform配置里直接指定Babel配置文件路径,避免Babel从错误目录查找:

修改根jest.config.js中package-a的配置:

module.exports = {
  projects: [
    {
      displayName: 'package-a',
      rootDir: './a/src',
      resolver: 'jest-webpack-resolver',
      transform: {
        '^.+\\.(js|jsx)$': [
          'babel-jest',
          {
            // 明确指定package-a的Babel配置文件路径
            configFile: './a/src/.babelrc'
          }
        ]
      }
    },
    // package-b的配置同理,如果需要Babel支持的话
    {
      displayName: 'package-b',
      rootDir: './b/src',
      resolver: 'jest-webpack-resolver'
    }
  ]
};

3. 共享根目录依赖(避免重复安装)

要让子项目复用根目录的Jest、Babel、Webpack依赖,只需确保Jest能找到根目录的node_modules。在每个子项目的jest.config.js里添加modulePaths:

module.exports = {
  resolver: "jest-webpack-resolver",
  // 从a/src往上两级就是packages目录,指向根node_modules
  modulePaths: ['../../node_modules']
};

这样就不用在每个子项目的package.json里重复安装这些依赖了。

验证效果

回到packages目录运行jest命令,应该就能正常解析模块,且Babel能正确转译ES6语法了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:38