努布问题,我很抱歉。
我想知道是否有人知道NextJS自我托管的推荐部署流程(例如,docker或kubernetes)。我做了一个典型的构建一次,在每个环境下,同时改变环境变量以匹配环境,但保持映像不变。
由于NextJS在使用"getInitialProps“和"publicRuntimeConfig”时自动退出SSG,我想知道将相同映像部署到多个环境的最佳方法是什么(同样,自我托管在通用云上,例如码头运行)。
谢谢你的帮忙!
发布于 2021-09-02 09:22:02
发布于 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文件的更改
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
中放置以下行
<Script src="/__ENV.js" strategy="beforeInteractive" />
注意:当__ENV.js
位于/public
目录中时,运行时文件将位于根目录中,因为该目录的每个文件都是
生成__ENV.js
文件
react-env
命令只需要生成__ENV.js
,因此您可以启动项目:
# 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_PUBLIC
:NEXT_PUBLIC
是客户端env的默认设置。node server.js
:或next dev
或任何其他命令来启动该项目Docker
我使用Vercel示例中的Dockerfile进行部署。若要在容器中生成__ENV.js
文件,请更改
RUN yarn build
至
RUN npx react-env --prefix NEXT_PUBLIC --path .env.production -- yarn build
在这里,我添加了--path .env.production
来使用production。
结论
就这样!现在您可以在__ENV.js
中更改客户端env,重新启动生产服务器,然后应用新的值。
发布于 2021-01-03 06:48:03
您可以:
https://nextjs.org/docs/basic-features/environment-variables
https://stackoverflow.com/questions/65521094
复制相似问题