我的项目设置如下:
project-ci (only docker)
nextjs
backend
暂存和生产相同,因此我传入了仅暂存此参数的docker-compose.yml
文件(这两个环境都是先通过npm run build
然后是npm run start
的这些命令构建的)
args:
NEXT_PUBLIC_URL: arbitrary_value
在nextjs的Dockerfile
中放置了这些命令
ARG NEXT_PUBLIC_URL
ENV NEXT_PUBLIC_URL=$NEXT_PUBLIC_URL
因此,变量可以在process.env.NEXT_PUBLIC_URL
下的nextjs中访问。
到目前为止,如果我尝试在console.log(process.env.NEXT_PUBLIC_URL)
中使用index.js
,则该值始终为undefined
。任何想法错了,也检查了文档,但结果仍然是undefined
https://nextjs.org/docs/api-reference/next.config.js/runtime-configuration
https://nextjs.org/docs/api-reference/next.config.js/environment-variables
答案 0 :(得分:3)
虽然 NextJs 有很多优点,但这是我发现的一个缺点。由于它们的特性,Advanced Static Optimization
(https://nextjs.org/docs/advanced-features/automatic-static-optimization) 环境变量在构建时被转换为它们的值。这在他们的网站上没有得到很好的记录,但经过大量测试后,我找到了解决方案。
所以你必须告诉你的 docker 镜像,当它在 npm run build
之前启动到 npm run start
时,它将消耗当前在 docker 镜像中的环境变量,并使用你想要的值将它们优化到构建中.
干杯。
答案 1 :(得分:0)
我可以使用公共运行时配置属性访问环境变量:
next.config.js
module.exports = {
publicRuntimeConfig: {
NEXT_PUBLIC_URL: process.env.NEXT_PUBLIC_URL,
}
};
然后:
import getConfig from "next/config";
const { publicRuntimeConfig } = getConfig();
console.log(publicRuntimeConfig.NEXT_PUBLIC_URL);
如果不起作用,请修复在docker容器中创建的env变量
答案 2 :(得分:-1)
我不需要做任何特别的事情,但我必须确保我的 env 变量以
NEXT_PUBLIC_...