在GitHub复合Action中安装的node_modules无法被调用Job访问
解决GitHub Actions复合Action生成的node_modules无法被主Job访问的问题
问题核心是复合Action的步骤未与主Job使用相同工作目录,导致node_modules被安装到错误路径,主Job后续步骤在默认的./backend目录下无法找到它。以下是具体解决方法:
1. 给复合Action添加工作目录参数
修改复合Action的定义文件(通常为action.yml),新增working-directory输入参数,让所有步骤都基于该目录执行:
name: 'Setup Node & Install Dependencies' description: '复用Node环境配置与依赖安装步骤' inputs: working-directory: description: '执行命令的目标目录' required: true runs: using: 'composite' steps: - name: 配置Node.js环境 uses: actions/setup-node@v4 with: node-version: 20 # 替换为你需要的Node版本 cache: 'npm' cache-dependency-path: ${{ inputs.working-directory }}/package-lock.json - name: 安装依赖 run: npm ci shell: bash working-directory: ${{ inputs.working-directory }} - name: 调试 - 查看当前目录文件 run: ls -a && pwd shell: bash working-directory: ${{ inputs.working-directory }}
2. 主工作流调用时传递工作目录
在主工作流中,调用复合Action时显式传入主Job的默认工作目录./backend:
name: 主工作流 on: [push, pull_request] defaults: run: working-directory: ./backend jobs: build-and-test: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v4 - name: 调用复合Action配置环境并安装依赖 uses: ./path/to/your/composite-action # 替换为你的复合Action实际路径 with: working-directory: ./backend - name: 验证node_modules是否存在 run: ls -a && pwd
3. 关键验证步骤
在复合Action和主Job的步骤中都加入pwd命令,确认两者的工作目录完全一致——这是保证node_modules路径统一的核心前提。
问题根源说明
复合Action默认会在自身执行目录(而非主Job的默认目录)下运行命令,导致npm ci生成的node_modules不在主Job后续步骤的访问路径中。通过显式传递并使用工作目录参数,可让所有步骤共享同一路径,自然就能访问到生成的依赖目录。
内容的提问来源于stack exchange,提问作者Magnuti
相关产品推荐
相关产品推荐

