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

GitHub Actions部署React+Express至AWS EB时dist文件夹未部署问题求助

问题:GitHub Actions部署React+Express到Elastic Beanstalk时dist文件夹未被部署

我正尝试通过GitHub Actions搭建部署流程,实现React应用构建并通过Express提供服务。以下是我的GitHub Actions工作流配置:

name: EB Deploy
on:
  push:
    branches: [ main ]
jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.9
        uses: actions/setup-python@v2
        with:
          python-version: 3.9
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install awsebcli
      - uses: actions/setup-node@v2
        with:
          node-version: '16'
      - name: Deploy to Elastic Beanstalk
        run: |
          cd client
          npm i
          npm run build
          mv dist ..
          cd ..
          eb deploy

Express静态资源托管配置:

app.use(express.static(path.join(__dirname, './dist')))

目前流程其他环节均正常,但eb命令并未部署dist文件夹,即使执行eb labs download下载部署版本,压缩包中也找不到dist目录。最终我通过压缩整个目录并执行eb deploy --staged才完成部署,想请教为何原流程无法部署dist文件夹,以及正确的部署方案。


原因分析
  • EB CLI默认部署规则:EB CLI默认仅打包Git追踪的文件生成部署包,而dist作为构建产物,通常会被添加到.gitignore中,因此不会被纳入部署范围
  • 文件移动不改变Git追踪状态:工作流中把dist从client目录移到根目录,但该目录依然不在Git的追踪列表内,eb deploy命令无法识别并包含它

正确部署方案

方案一:使用eb deploy --staged(推荐,已验证可行)

--staged参数会让EB CLI基于当前工作目录的所有文件(无论是否被Git追踪)生成部署包,刚好适配构建产物的部署需求。调整工作流的部署步骤即可:

- name: Deploy to Elastic Beanstalk
  run: |
    cd client
    npm i
    npm run build
    mv dist ..
    cd ..
    eb deploy --staged

方案二:用.ebignore文件控制部署内容

在项目根目录创建.ebignore文件,通过该文件指定部署时要包含/排除的内容(优先级高于.gitignore):

# 排除不需要的依赖目录
node_modules/
# 排除React源码目录,只保留构建产物
client/
# 明确包含dist目录
!dist/

配置完成后直接运行eb deploy,EB CLI会遵循.ebignore的规则打包文件。

方案三:临时将dist加入Git暂存(不推荐)

如果不想使用前两种方案,可以在构建后临时把dist加入Git暂存区,部署完成后再移除暂存状态:

- name: Deploy to Elastic Beanstalk
  run: |
    cd client
    npm i
    npm run build
    mv dist ..
    cd ..
    git add dist
    eb deploy
    git reset HEAD dist

该方法仅在GitHub Actions的临时仓库中操作,不会影响本地或远程仓库的Git状态,但流程相对繁琐,不如前两种方案简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:05:24