问题背景

在使用GitHub Actions部署多项目仓库时,经常会遇到这样的错误:

Error: Dependencies lock file is not found in /home/runner/work/project/project. 
Supported file patterns: package-lock.json,npm-shrinkwrap.json,yarn.lock

这是因为GitHub Actions的actions/setup-node默认只在仓库根目录查找依赖锁定文件,而在多项目结构中,每个子项目都有自己的package-lock.json。

解决方案

解决方法是为每个子项目正确配置cache-dependency-path参数,指向对应的package-lock.json文件。

- name: 设置项目Node.js缓存
  uses: actions/setup-node@v3
  with:
    node-version: '20'
    cache: 'npm'
    cache-dependency-path: './subdir/package-lock.json'

完整示例

以下是针对多项目仓库的配置示例:

# 处理项目A
- name: 检查是否需要部署项目A
  id: check_project_a
  run: |
    COMMIT_MSG=$(git log -1 --pretty=%B)
    if [[ "$COMMIT_MSG" == *"projectA"* ]]; then
      echo "DEPLOY=true" >> $GITHUB_OUTPUT
    else
      echo "DEPLOY=false" >> $GITHUB_OUTPUT
    fi

- name: 设置项目A的Node.js缓存
  if: steps.check_project_a.outputs.DEPLOY == 'true'
  uses: actions/setup-node@v3
  with:
    node-version: '20'
    cache: 'npm'
    cache-dependency-path: './projectA/package-lock.json'

- name: 安装项目A依赖
  if: steps.check_project_a.outputs.DEPLOY == 'true'
  working-directory: ./projectA
  run: npm ci

小结

通过正确配置cache-dependency-path参数,可以:

  1. 为每个子项目单独设置依赖缓存
  2. 加速构建流程,减少依赖安装时间
  3. 提高CI/CD流程的稳定性

在多项目仓库中,应该为每个需要构建的子项目单独配置Node.js环境和缓存路径,而不是使用全局缓存设置。

最后修改:2025 年 06 月 19 日
如果觉得我的文章对你有用,请随意赞赏