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

Turborepo/Monorepo中多Jest版本隔离问题求助

在Turborepo中实现子包独立使用不同版本Jest

问题场景

我有一个Turborepo项目,目录结构如下:

  • apps
  • libs
    • package1
      • package.json
    • package2
      • package.json
  • package.json

尝试将libs下的子包逐个升级Jest版本,希望让package1使用新版Jest,同时保留package2的旧版Jest。试过overrides、resolutions、nohoist、workspaces等配置,运行yarn test时脚本输出的Jest版本显示正确,但测试失败表现和版本不匹配的情况一致。

解决步骤

1. 为子包单独安装对应版本Jest

在项目根目录执行命令,分别给两个子包安装目标版本的Jest:

yarn workspace package1 add jest@<新版本号> --dev
yarn workspace package2 add jest@<旧版本号> --dev

确保两个子包的package.json中,devDependencies里的Jest版本为各自的目标版本,根目录package.json不要声明Jest的公共版本。

2. 配置Turborepo的nohoist规则

在根目录package.json中添加nohoist配置,阻止Jest相关包被统一hoist到根目录:

{
  "workspaces": {
    "packages": ["apps/*", "libs/*"],
    "nohoist": [
      "**/jest",
      "**/jest/**"
    ]
  }
}

这样Yarn会将两个子包的Jest分别安装在各自的node_modules目录下,彻底避免版本冲突。

3. 让子包test脚本调用本地Jest

修改两个子包的package.json中的scripts,明确指定调用本地安装的Jest:

  • package1的package.json:
{
  "scripts": {
    "test": "./node_modules/.bin/jest"
  }
}
  • package2的package.json:
{
  "scripts": {
    "test": "./node_modules/.bin/jest"
  }
}

直接调用本地bin目录的Jest,避免全局或根目录hoist版本的干扰。

4. 清理缓存并重新安装依赖

执行以下命令清理旧依赖和缓存,确保依赖安装完全遵循新配置:

rm -rf node_modules
rm yarn.lock
yarn install

5. 验证版本与测试运行

分别进入两个子包目录,验证Jest版本:

cd libs/package1 && ./node_modules/.bin/jest --version
cd libs/package2 && ./node_modules/.bin/jest --version

确认版本正确后,分别运行测试:

yarn workspace package1 test
yarn workspace package2 test

此时两个子包会各自使用对应版本的Jest运行测试,不会互相干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:52:14