AWS Amplify部署Next.js时STRAPI环境变量返回undefined问题
检查Amplify环境变量的部署范围
确认在Amplify控制台设置变量时,是否勾选了**"Apply to all branches"或者当前部署分支的专属变量。分支变量会覆盖全局变量,若只在全局设置但分支未同步,就会出现变量读取失败的情况。另外,要确保变量被设置为运行时可用**——Next.js的Node端逻辑(比如API路由、getServerSideProps)依赖运行时变量,Amplify控制台的变量设置里别把它归到构建时类别。验证Next.js的环境变量加载逻辑
确保Node端代码通过process.env.STRAPI调用变量,不要加NEXT_PUBLIC_前缀(这个前缀是给客户端暴露变量用的)。如果你的Next.js版本有自定义next.config.js配置,需要把STRAPI显式加入env字段:module.exports = { env: { STRAPI: process.env.STRAPI, }, };注意:非
NEXT_PUBLIC_前缀的变量只能在Node端(服务器组件、API路由、SSR/SSG函数)访问,如果你的调用代码在客户端组件里,必然会返回undefined,先确认代码的执行环境。检查Amplify的构建配置
打开Amplify控制台的Build settings查看amplify.yml,确认构建阶段正确传递了环境变量。比如build命令前没有重置process.env的脚本,配置示例如下:version: 1 frontend: phases: preBuild: commands: - npm install build: commands: - npm run build artifacts: baseDirectory: .next files: - '**/*' cache: paths: - node_modules/**/*排查CloudWatch日志细节
在CloudWatch的构建日志里搜索STRAPI,看构建时是否正确加载了变量。如果日志里找不到这个变量,说明Amplify没正确传递,检查变量拼写(环境变量区分大小写)、设置是否生效。再看运行时日志(比如API路由的执行日志),确认process.env.STRAPI在运行时是否存在。若构建时存在但运行时消失,尝试选择**"Full rebuild"**重新部署,避免增量构建的缓存问题。其他排查步骤
用简单测试值(比如test123)替换原变量值,排除特殊字符导致的解析错误;清理Amplify的部署缓存后重新构建;确认本地.env文件中变量正常,排除代码本身的问题。
内容的提问来源于stack exchange,提问作者Matthew DeGraffenreid

