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

如何在GitHub Actions中用lerna执行jest单测并解决jest: not found报错

问题根因

你遇到的jest: not found错误本质是CI环境中子包的devDependencies没有被正确安装,导致子包node_modules/.bin路径下没有生成jest的可执行文件,可按照以下步骤逐一修复:

1. 调整CI依赖安装逻辑

你当前依赖postinstall钩子自动执行lerna bootstrap,但npm不同版本对钩子的触发逻辑和workspaces的兼容有差异,容易出现子包依赖漏装的问题。建议在CI步骤中显式执行bootstrap命令,同时用npm ci替代npm install保证依赖版本和本地完全一致:

- name: Install Dependencies
  run: npm -v && npm ci && npm run bootstrap

2. 修正缓存配置

你当前只缓存了npm全局缓存目录,没有缓存根目录和子包的node_modules,不仅会拖慢CI速度,也可能出现依赖安装不完整的问题。修改缓存配置如下:

- name: Cache node modules
  uses: actions/cache@v2
  env:
    cache-name: cache-node-modules
  with:
    path: |
      node_modules
      packages/*/node_modules
      ~/.npm
    key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-build-${{ env.cache-name }}-

注意要提前把根目录和所有子包的package-lock.json提交到仓库,否则缓存key计算会失效。

3. 兜底修复方案

如果调整后仍报错,可以通过两种方式兜底:

  • 把子包的test脚本改为用npx调用jest,确保能自动匹配到可执行文件:
    // packages/core/package.json
    "scripts": {
      "test": "npx jest --coverage"
    }
    
  • 把jest、ts-jest等公共测试依赖安装到根目录的devDependencies中,所有子包会自动继承根目录的可执行文件路径。

可选优化

你可以在lerna.json中配置依赖提升,避免重复安装子包公共依赖,也能减少路径找不到的问题:

{
  "command": {
    "bootstrap": {
      "hoist": true
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:00:02