我的NextJS应用程序中有一个NEXT_PUBLIC环境变量。它已在我的 .env.local 文件中设置并且工作正常,但在将其部署到Azure应用服务后,应用无法读取它。它是*'undefined'*。我已在应用服务的配置下配置它。
有什么建议吗?先谢谢你。
wfypjpf41#
我遇到了同样的问题,Azure AppService上的NEXT_PUBLIC环境变量总是具有值“undefined”,尽管它们在AppService设置中被定义为环境变量。构建Docker映像时,NEXT_PUBLIC环境变量在构建期间直接设置,之后无法覆盖。这就是AppService中NEXT_PUBLIC的设置不起作用的原因。Renato Pozzi(dev.to)的以下解决方案对我有帮助。以下是我的步骤:(下一版本12.2.5):a)在“构建”过程开始之前,在Dockerfile中创建所需的NEXT_PUBLIC变量,并用“占位符值”填充它。
RUN NEXT_PUBLIC_API_URL=PLACEHOLDER_NEXT_PUBLIC_API_URL yarn build
B)创建一个入口点文件(entrypoint.sh),该文件在Docker映像启动时将占位符值替换为AppService中的真实的环境变量。在我的示例中,占位符“PLACEHOLDER_NEXT_PUBLIC_API_URL”被替换为AppService配置(环境变量)中的真实的值“NEXT_PUBLIC_API_URL”。
#!/bin/sh test -n "$NEXT_PUBLIC_API_URL" find /app/.next \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i "s#PLACEHOLDER_NEXT_PUBLIC_API_URL#$NEXT_PUBLIC_API_URL#g" exec "$@"
c)使以前创建的入口点文件在Dockerfile中可见。
COPY --chown=nextjs:nodejs entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] CMD ["node", "server.js"]
1条答案
按热度按时间wfypjpf41#
我遇到了同样的问题,Azure AppService上的NEXT_PUBLIC环境变量总是具有值“undefined”,尽管它们在AppService设置中被定义为环境变量。
构建Docker映像时,NEXT_PUBLIC环境变量在构建期间直接设置,之后无法覆盖。这就是AppService中NEXT_PUBLIC的设置不起作用的原因。
Renato Pozzi(dev.to)的以下解决方案对我有帮助。
以下是我的步骤:(下一版本12.2.5):
a)在“构建”过程开始之前,在Dockerfile中创建所需的NEXT_PUBLIC变量,并用“占位符值”填充它。
B)创建一个入口点文件(entrypoint.sh),该文件在Docker映像启动时将占位符值替换为AppService中的真实的环境变量。
在我的示例中,占位符“PLACEHOLDER_NEXT_PUBLIC_API_URL”被替换为AppService配置(环境变量)中的真实的值“NEXT_PUBLIC_API_URL”。
c)使以前创建的入口点文件在Dockerfile中可见。