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

如何在AWS Amplify Hosting中保留旧构建的工件?

解决AWS Amplify部署后旧用户因缺失JS文件崩溃的问题

核心原因

AWS Amplify每次部署都会启动全新的Docker容器执行构建流程,容器内的文件系统是临时且独立的——上一次构建的产物不会被带到新容器里,所以你设置vite的build.emptyOutDir: false根本没用,因为新容器的输出目录本来就是空的,没有旧文件可保留。

可行解决方案

  • 给静态资源加哈希后缀(最推荐)
    让vite在构建时给JS、CSS等资源文件名加上唯一哈希,这样新构建的文件和旧版本文件名完全不同,Amplify会同时保留新旧文件,旧用户访问时不会出现文件缺失。
    修改vite配置文件:

    export default defineConfig({
      build: {
        rollupOptions: {
          output: {
            entryFileNames: `assets/[name].[hash].js`,
            chunkFileNames: `assets/[name].[hash].js`,
            assetFileNames: `assets/[name].[hash].[ext]`
          }
        }
      }
    })
    

    同时调整Amplify的缓存规则:给index.html设置5分钟以内的短缓存,确保用户能及时获取最新入口文件;给带哈希的静态资源设置1年的长缓存,提升加载性能。

  • 用分支预发布+流量切换
    先在开发分支完成构建和测试,确认没问题后,再通过Amplify控制台将生产流量切换到这个新分支。旧用户在切换前一直访问旧分支的稳定版本,切换后统一加载新版本,彻底避免中间状态的文件缺失问题。

  • 自定义构建脚本合并旧产物
    如果必须保留无哈希的旧文件,可以在Amplify构建脚本中先从Amplify关联的S3桶同步旧构建文件,再执行vite构建:

    # 同步S3桶里的旧构建文件到当前dist目录,排除index.html避免覆盖新入口
    aws s3 sync s3://<你的Amplify存储桶名>/<分支名>/build ./dist --exclude "index.html"
    # 执行vite构建
    vite build
    

    注意:需要给Amplify的构建IAM角色添加对应S3桶的读写权限,否则无法同步文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:35:02