首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NextJS -如何获得运行时环境变量

NextJS -如何获得运行时环境变量
EN

Stack Overflow用户
提问于 2020-12-31 12:46:44
回答 3查看 4.6K关注 0票数 12

努布问题,我很抱歉。

我想知道是否有人知道NextJS自我托管的推荐部署流程(例如,docker或kubernetes)。我做了一个典型的构建一次,在每个环境下,同时改变环境变量以匹配环境,但保持映像不变。

由于NextJS在使用"getInitialProps“和"publicRuntimeConfig”时自动退出SSG,我想知道将相同映像部署到多个环境的最佳方法是什么(同样,自我托管在通用云上,例如码头运行)。

  1. 我必须总是在环境变量中烘焙吗?因此,我必须为每个环境构建一个映像,并对env进行更新。
  2. 使用publicRuntimeConfig / getInitialProps,但忘记SSG优化,即使我的变量是不敏感的(例如GA_TRACKING_ID)
  3. ..。还有别的事吗?

谢谢你的帮忙!

EN

回答 3

Stack Overflow用户

发布于 2021-09-02 09:22:02

您可能需要查看反应env,它就是这样做的。

我们的想法是,react env将为您生成一个带有环境变量的__ENV.js JS文件,然后您可以通过窗口或env助手在客户端访问该文件,例如:

代码语言:javascript
运行
复制
<small>
  Works in the browser: <b>{env("CRA")}</b>.
</small>

当使用Docker时,您可以在容器启动时生成所需的设置一个入口点

代码语言:javascript
运行
复制
ENTRYPOINT yarn react-env --env APP_ENV
票数 2
EN

Stack Overflow用户

发布于 2022-10-29 14:28:44

我将扩展@gyum的答案,因为react-env文档并不是最新的,有几件事情需要一些时间才能弄清楚。

Next.js版本:12.2.5

套餐

Next.js回购中使用了两个软件包:react-env@beam-australia/react-env。我不知道前者的目的是什么,我用的是后者。

“同构”

react-env声称它是同构的,但我无法设法使它在服务器端工作。下面是对.env文件的更改

代码语言:javascript
运行
复制
REGULAR_VAR=VALUE
NEXT_PUBLIC_REGULAR_VAR=$REGULAR_VAR

我在服务器和客户端上都使用了一些变量,因此要使其正常工作:

  • REGULAR_VAR在服务器上使用,在.env文件中管理。
  • NEXT_PUBLIC_REGULAR_VAR在客户机上使用,如:env('REGULAR_VAR') (注意:删除了NEXT_PUBLIC前缀)。在__ENV.js文件中管理

使用包

若要在__ENV.js中使用Next.js文件,请在_document.tsx中放置以下行

代码语言:javascript
运行
复制
<Script src="/__ENV.js" strategy="beforeInteractive" />

注意:当__ENV.js位于/public目录中时,运行时文件将位于根目录中,因为该目录的每个文件都是

生成__ENV.js文件

react-env命令只需要生成__ENV.js,因此您可以启动项目:

代码语言:javascript
运行
复制
# like this
npx react-env --prefix NEXT_PUBLIC -- node server.js
# or like this
yarn react-env --prefix NEXT_PUBLIC && node server.js
  • --prefix NEXT_PUBLICNEXT_PUBLIC是客户端env的默认设置。
  • node server.js:或next dev或任何其他命令来启动该项目

Docker

我使用Vercel示例中的Dockerfile进行部署。若要在容器中生成__ENV.js文件,请更改

代码语言:javascript
运行
复制
RUN yarn build

代码语言:javascript
运行
复制
RUN npx react-env --prefix NEXT_PUBLIC --path .env.production -- yarn build

在这里,我添加了--path .env.production来使用production。

结论

就这样!现在您可以在__ENV.js中更改客户端env,重新启动生产服务器,然后应用新的值。

票数 0
EN

Stack Overflow用户

发布于 2021-01-03 06:48:03

您可以:

  1. 为不同的环境建立相同的形象
  2. 对不同的环境使用不同的环境变量。
  3. 有许多方法可以为不同的环境设置环境变量。

https://nextjs.org/docs/basic-features/environment-variables

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65521094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档