NextJS公共环境变量在Azure应用服务上不起作用

omhiaaxx  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(149)

我的NextJS应用程序中有一个NEXT_PUBLIC环境变量。它已在我的 .env.local 文件中设置并且工作正常,但在将其部署到Azure应用服务后,应用无法读取它。它是*'undefined'*。我已在应用服务的配置下配置它。

有什么建议吗?
先谢谢你。

wfypjpf4

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"]

相关问题