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

如何在AWS CodeCommit->CodeBuild->CodeDeploy流水线中仅将AngularJS构建生成的dist文件夹内容部署至Amazon S3存储桶(无需Lambda函数)

不用Lambda!在AWS流水线里只部署dist文件夹内容的快捷方法

当然可以!你完全不用写Lambda函数,在现有的CodeCommit->CodeBuild->CodeDeploy流水线里就能轻松实现只把dist文件夹内的内容部署到S3桶,下面是两种最实用的方案:

方案一:直接在CodeBuild中同步dist内容到S3(最简单)

其实你可以跳过CodeDeploy这一步,直接在CodeBuild的构建完成阶段用AWS CLI把dist里的文件同步到S3。这样流程更简洁,也不用额外配置CodeDeploy。

只需要修改你的buildspec.yml,在post_build阶段添加同步命令:

version: 0.2
phases:
  install:
    runtime-versions:
      nodejs: 20  # 根据你的Angular版本选合适的Node.js版本
    commands:
      - npm install  # 安装项目依赖
  build:
    commands:
      - ng build --configuration production  # 用生产模式构建,替代ng serve(ng serve是开发服务器用的,产物不适合部署)
  post_build:
    commands:
      # 同步dist下的项目文件夹内容到S3桶,--delete参数会删除桶里不存在的旧文件
      - aws s3 sync ./dist/你的项目名称 s3://你的S3桶名 --delete

注意事项:

  • 要确保你的CodeBuild服务角色拥有访问目标S3桶的权限(比如s3:PutObject、s3:DeleteObject等)
  • 替换你的项目名称:Angular构建后,dist文件夹里通常会有一个和项目同名的子文件夹,你要指定这个路径;如果你的构建配置是直接把产物放到dist根目录,就改成./dist/

方案二:调整CodeBuild产物+CodeDeploy配置(保留现有流水线结构)

如果你想继续保留CodeDeploy的流程,那可以让CodeBuild只输出dist文件夹内的内容,再让CodeDeploy把这些内容部署到S3。

步骤1:修改CodeBuild的buildspec.yml,指定只打包dist内的内容

version: 0.2
phases:
  install:
    runtime-versions:
      nodejs: 20
    commands:
      - npm install
  build:
    commands:
      - ng build --configuration production
artifacts:
  base-directory: dist/你的项目名称  # 指向dist里的内容目录
  files:
    - '**/*'  # 打包该目录下的所有文件和子文件夹

步骤2:配置CodeDeploy部署

在你的CodeDeploy应用(S3类型)的部署组中,确保部署的是CodeBuild输出的这个Artifact。CodeDeploy会直接把Artifact里的所有内容(也就是dist内的文件)上传到S3桶的根目录,不会带dist文件夹本身。

小提示

  • 强烈建议用ng build --configuration production替代ng serve来构建产物:ng serve是启动开发服务器用的,生成的产物没有经过优化,不适合生产部署;而ng build的生产模式会做代码压缩、Tree Shaking等优化,生成适合部署的产物。
  • 测试的时候可以先在本地运行aws s3 sync命令或者打包命令,确认结果符合预期后再放到流水线里,避免踩坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:02:46