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

为何pnpm实际使用的jest版本与package.json声明的不符?

Jest版本冲突导致测试报错(Monorepo + Turborepo + pnpm场景)

问题背景

我的子包package.json中devDependencies配置如下:

"devDependencies": {
  "typescript": "~4.6.2",
  "jest": "~27.5.1",
  "ts-jest": "~27.1.3",
  "@types/jest": "~27.4.1",
  "@types/uuid": "~8.3.0"
}

运行pnpm run test时出现以下错误:

FAIL  test/types/combineModelsByPropertyNameAndType.spec.ts
  ● Test suite failed to run

    TypeError: Jest: a transform must export a `process` function.

      at ScriptTransformer._getTransformer (../../node_modules/.pnpm/@jest+transform@26.6.2/node_modules/@jest/transform/build/ScriptTransformer.js:360:13)
      at ScriptTransformer.transformSource (../../node_modules/.pnpm/@jest+transform@26.6.2/node_modules/@jest/transform/build/ScriptTransformer.js:427:28)
      at ScriptTransformer._transformAndBuildScript (../../node_modules/.pnpm/@jest+transform@26.6.2/node_modules/@jest/transform/build/ScriptTransformer.js:569:40)
      at ScriptTransformer.transform (../../node_modules/.pnpm/@jest+transform@26.6.2/node_modules/@jest/transform/build/ScriptTransformer.js:607:25)

明明声明了Jest 27.x版本,但实际运行时加载的是26.x版本的@jest/transform,这是报错的直接原因。当前使用Turborepo作为monorepo管理工具,仓库内其他子包使用的是Jest 26.x,不确定问题出在pnpm还是Turborepo。

解决方案

1. 强制子包依赖版本(pnpm专属)

在子包的package.json中添加pnpm.overrides字段,强制锁定Jest及其相关依赖的版本,避免被monorepo内其他子包的版本覆盖:

{
  "pnpm": {
    "overrides": {
      "jest": "~27.5.1",
      "@jest/transform": "~27.5.1",
      "ts-jest": "~27.1.3",
      "@types/jest": "~27.4.1"
    }
  }
}

2. 配置Turborepo任务隔离

在项目根目录的turbo.json中,为该子包的test任务配置独立的缓存策略,避免共享其他子包的依赖环境:

{
  "pipeline": {
    "test": {
      "dependsOn": ["^build"],
      "outputs": [],
      "env": ["NODE_ENV"],
      "cache": false // 或者针对该子包单独配置缓存键
    }
  }
}

3. 清理缓存并重装依赖

执行以下命令清理pnpm缓存,确保重新安装时拉取正确版本的依赖:

pnpm store prune
pnpm install --force

4. 检查根目录依赖配置

如果monorepo根目录有package.json,检查是否全局声明了Jest相关依赖。若存在,要么统一升级到27.x版本,要么删除根目录的Jest依赖,让各个子包独立管理自身依赖版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:54:14