我将在@gyum-fox的答案基础上进行扩展,因为react-env
文档不是最新的,有些事情需要花费一些时间来弄清楚。
Next.js版本:12.2.5
软件包
在react-env
Next.js repo中使用了2个软件包: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
文件中管理
使用该包
要在 Next.js 中使用__ENV.js
文件,请将以下行放置在 _document.tsx
中
<Script src="/__ENV.js" strategy="beforeInteractive" />
注意:虽然
__ENV.js
位于
/public
目录中,但在运行时文件将位于根目录下,因为该目录中的每个文件都将如此。
生成__ENV.js
文件
react-env
命令只需要用来生成__ENV.js
文件,以便您可以启动项目:
npx react-env --prefix NEXT_PUBLIC -- node server.js
yarn react-env --prefix NEXT_PUBLIC && node server.js
--prefix NEXT_PUBLIC
:客户端环境变量的默认值为NEXT_PUBLIC
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
以使用生产环境变量。
结论
就是这样!现在您可以在__ENV.js
中更改客户端环境变量,重新启动生产服务器,新值将被应用。