Next.js 中的运行时配置

3
我正在尝试设置我的nextjs应用程序以使用运行时配置。基本上,我有一个端点url需要通过docker env vars可用。 我按照这些文档进行了配置,但它并没有起作用。我的应用程序仍然使用.env文件中的默认值。是否有人能帮助我理解我错过了什么或做错了什么? 谢谢!

docs: https://nextjs.org/docs/api-reference/next.config.js/runtime-configuration https://nextjs.org/docs/advanced-features/custom-app

步骤: 1- 添加到我的next.config.js文件中
publicRuntimeConfig: {
  NEXT_PUBLIC_BACKEND_HOST: process.env.NEXT_PUBLIC_BACKEND_HOST,
},

2- 在我的页面中检索配置

const { publicRuntimeConfig } = getConfig()
const baseURL = publicRuntimeConfig.NEXT_PUBLIC_BACKEND_HOST

3- 创建了一个自定义应用程序来设置getInitialProps

如果没有getInitialProps,运行时配置将对任何页面(或页面中的组件)不可用。

import App from 'next/app'

function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}
MyApp.getInitialProps = async (appContext) => {
  const appProps = await App.getInitialProps(appContext);
  return { ...appProps }
}
export default MyApp
1个回答

0

你的代码看起来一切正常,在一个全新的项目中测试后一切都能正确运行。因此,我认为问题在于在运行next start时实际上没有设置NEXT_PUBLIC_BACKEND_HOST环境变量。顺便说一下,这种用法不需要使用NEXT_PUBLIC前缀。如果你想要构建时使用参数,可以使用NEXT_PUBLIC_前缀,使得变量在客户端和服务器端都可用,只需在任何地方使用process.env.NEXT_PUBLIC_即可。请注意,在这种情况下,该值将在构建时内联,因此在构建期间必须存在该环境变量。


谢谢你的帮助!我尝试了,但它仍然返回未定义。也许我还配置错了什么? - Eder
抱歉,我刚刚测试了一下,发现 NEXT_PUBLIC_ 并不是问题所在。对我来说一切都正常工作,所以我认为你在运行 next start 时可能没有设置 NEXT_PUBLIC_BACKEND_HOST 环境变量。请查看更新后的答案。 - FINDarkside
基本上我的需求是:我需要提供一个端点URL,从我们在k8s集群中的docker环境配置中运行时读取。运行时,而不是构建时。一个docker镜像将动态加载来自我运行应用程序的不同环境的配置。 我们创建了一个示例应用程序,其中包含所有当前配置,以展示这个想法。我可能还配置错了什么吗? https://github.com/rafaela2/hello-world-next - Eder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接