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

GitHub Workflow中npm ci的node_modules存储位置及打包部署问题

问题解答:GitHub Workflow中npm ci的node_modules存储与打包部署AWS Lambda

核心疑问

  1. 在GitHub Workflow里,npm ci执行后node_modules文件夹存在哪里?
  2. 能否通过GitHub Workflow将node_modules打包为zip,用于部署到AWS Lambda?当前测试发现build job中找不到node_modules。

问题原因分析

首先明确:GitHub Actions的每个job都是运行在独立的虚拟机实例上,job之间的文件系统完全隔离。你当前的node job里通过npm ci生成的node_modules,只会存在于node job对应的虚拟机中,build job重新checkout代码后,自然找不到之前生成的node_modules。另外,build job里的if: steps.cache-dep.outputs.cache-hit != 'true'完全无效,因为steps.cache-dep是node job的步骤ID,跨job无法访问该变量。

关于第一个问题:npm ci执行后,node_modules会直接生成在当前工作目录的根层级(和你的package.json同目录),但仅限当前job的虚拟机环境内。

解决方案

方案一:合并Node安装与打包步骤到同一个Job(推荐,最简单高效)

把node和build job的步骤合并,这样npm ci生成的node_modules可以直接被打包步骤使用,无需跨job传递文件:

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 🛒 Checkout
        uses: actions/checkout@v3
      
      - name: 🤖 Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 16.13.2
          registry-url: 'https://npm.pkg.github.com'
          cache: 'npm'
          cache-dependency-path: '**/package.json'
          
      - name: Cache node_modules
        id: cache-dep
        uses: actions/cache@v3
        with:
          path: ./node_modules
          key: ${{ runner.os }}-pricing-scraper-${{ hashFiles('package.json') }}
          restore-keys: |
            ${{ runner.os }}-pricing-scraper-
            
      - name: Config NPM
        shell: bash
        run: npm install -g npm@8.1.2
          
      - name: ⚙️ Install node_modules
        if: steps.cache-dep.outputs.cache-hit != 'true'
        shell: bash
        run: npm ci

      - name: 🏗 Zip files and folder
        shell: bash
        run: |
          echo Start running the zip script
          # 检查output目录是否存在
          DIR="./output"
          if [ ! -d "$DIR" ]; then
            echo "Error: ${DIR} not found. Can not continue."
            exit 1
          fi
          
          if [ ! -d "./node_modules" ]; then
            echo "Error: node_modules not found. Can not continue."
            exit 1
          fi
          
          rm -rf "$DIR"/*
          echo Deleted prior deployment zips
          
          # 打包核心目录
          zip -r "$DIR"/core.zip config node_modules shipping util
          
          # 后续可以添加部署到AWS Lambda的步骤

方案二:跨Job传递node_modules(适合必须拆分Job的场景)

如果一定要分开node和build job,需要用actions/upload-artifact将node_modules上传为工件,再在build job中下载:

  1. 在node job末尾添加上传步骤:
# node job的最后添加
- name: Upload node_modules artifact
  uses: actions/upload-artifact@v3
  with:
    name: node-modules
    path: ./node_modules
  1. 在build job中添加下载步骤:
jobs:
  build:
    runs-on: ubuntu-latest
    needs: [node]
    steps:
      - name: 🛒 Checkout
        uses: actions/checkout@v3
      
      - name: Download node_modules artifact
        uses: actions/download-artifact@v3
        with:
          name: node-modules
          path: ./node_modules
          
      - name: 🏗 Zip files and folder
        shell: bash
        run: |
          # 原打包脚本内容...

额外注意事项

  • 不要依赖node_modules被提交到仓库:node_modules体积大且依赖环境,通常都在.gitignore里,Workflow里必须通过npm ci或npm install生成。
  • AWS Lambda部署时,确保zip包包含所有必要依赖,且目录结构符合Lambda要求(比如入口文件在根目录,或通过Lambda配置指定handler路径)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:05:14