此问题发生在使用AWS Amplify进行项目部署时,更新仅特定类别(例如API、函数等)的文件会导致它覆盖已更改的模板文件。解决此问题的方法是在amplify.yml文件中添加以下配置:
version: 1
frontend:
phases:
# build 运行时会使用 amplify.yml 的这个名字作为阶段的名字
build:
# 这个是将我们自定义的 hook 注入到 build 命令之前,以便替换 host 的 IP
preBuild:
commands:
- node ./add-environment-variables.js
artifacts:
# 不将项目根目录下的 Amplify/backend/awsconfiguration.json 文件放入 build 输出的部署物中
# 让 backend 的更新阶段独立出来,避免不停的 push 产生冲突
exclude:
- Amplify/backend/awsconfiguration.json
backend:
phases:
# 编译器为提高构建效率,会分阶段构建,将模型和自定义 resolver 的处理放到 build 中
build:
commands:
- amplify codegen models
- amplify codegen typescript
- amplify update api
- amplify push
# update 这个阶段,属于不同的流程,不应该混淆 build
update:
# 强制用户进行 backend 的更新,保证过去的更新被体现,并且将最新的配置应用到云端
# override 使用函数绑定了一个公用云端配置,避免页面手误,盲目的从云端下载更新
commands:
- amplify update api --force
- amplify push --force
# 当用户访问 auth 相关页面,或者初次打开页面,会去 network 获取最新用户池的配置
# 并更新到本地,当用户登出后,config 就会被置为 null,刷新页面即可
auth:
triggers:
# 顶级路由下,只有登录方能访问的页面
signIn:
mode: "overwrite"
# 顶级路由下,所有人都能访问的页面,如果没有登录,则只看,没有操作权限
signOut:
mode: "overwrite"
``