introduction

通常你想要使用构建时环境变量去提供自己的配置,对此的原因是运行时配置增加了渲染 / 初始化消耗并且和自动静态优化不兼容 …

为了增加运行时配置到你的应用种(打开next.config.js并增加publicRuntimeConfig以及 serverRuntimeConfig 配置)

  1. module.exports = {
  2. serverRuntimeConfig: {
  3. // Will only be available on the server side
  4. mySecret: 'secret',
  5. secondSecret: process.env.SECOND_SECRET, // Pass through env variables
  6. },
  7. publicRuntimeConfig: {
  8. // Will be available on both server and client
  9. staticFolder: '/static',
  10. },
  11. }

serverRuntimeConfig中放置任何仅服务端运行时配置 ..

对于publicRuntimeConfig中的配置能够同时在客户端和服务端代码中访问 …

依赖于publicRuntimeConfig的页面必须使用getInitialProps或者getServerSideProps或者你的应用必须存在使用getIntialProps的自定义App ..去取消自动静态优化 …

运行时配置对于没有任何服务端渲染的页面或者页面中的组件不可用 …

(因为它是运行时配置) …

为了在app中访问运行时配置,你可以使用next/config,类似于

  1. import getConfig from 'next/config'
  2. import Image from 'next/image'
  3. // Only holds serverRuntimeConfig and publicRuntimeConfig
  4. const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
  5. // Will only be available on the server-side
  6. console.log(serverRuntimeConfig.mySecret)
  7. // Will be available on both server-side and client-side
  8. console.log(publicRuntimeConfig.staticFolder)
  9. function MyImage() {
  10. return (
  11. <div>
  12. <Image
  13. src={`${publicRuntimeConfig.staticFolder}/logo.png`}
  14. alt="logo"
  15. layout="fill"
  16. />
  17. </div>
  18. )
  19. }
  20. export default MyImage