如何通过AWS CodeBuild将dist目录内容上传至S3存储桶根目录?
解决AWS CodeBuild将dist目录内容直接上传至S3根目录的问题
我之前部署静态项目时也碰到过一模一样的问题!核心误区就是没搞对S3同步命令的路径写法,导致dist目录本身被传到了S3里,而不是把里面的内容直接放到根目录。下面给你两种最靠谱的解决办法:
方法一:进入dist目录后同步
在你的buildspec.yml里,先切换到dist目录,再用当前目录(.)作为源路径同步到S3桶,这样所有文件和子目录都会直接传到S3根目录:
version: 0.2 phases: install: commands: - # 这里放你的依赖安装命令,比如npm install build: commands: - # 执行你的构建命令,比如npm run build - cd dist # 切换到dist目录 - aws s3 sync . s3://你的存储桶名称/ --delete # 同步当前目录到S3根
--delete参数是可选的,它会删除S3桶里已经不存在于本地dist目录的文件,适合保持内容完全同步。
方法二:带斜杠的路径写法
如果你不想切换目录,也可以直接指定dist/(注意末尾的斜杠)作为源路径,这个斜杠是关键——它代表dist目录内部的所有内容,而不是dist目录本身:
version: 0.2 phases: install: commands: - # 依赖安装命令 build: commands: - # 构建命令 - aws s3 sync dist/ s3://你的存储桶名称/ --delete
避坑提醒
- 别用
aws s3 cp dist/* s3://你的存储桶名称/:cp命令的*不会递归复制子目录,像fonts/、js/这类子文件夹会被忽略,必须用sync来处理递归场景。 - 检查CodeBuild权限:确保你的CodeBuild服务角色拥有
s3:PutObject、s3:ListBucket、s3:DeleteObject(如果用了--delete)的权限,否则会出现上传失败的情况。
内容的提问来源于stack exchange,提问作者Xylude Xaalud
相关产品推荐
相关产品推荐

