通过 next.config.js 与 NEXT_PUBLIC 前缀在 nextjs 中公开环境变量有什么区别?
What's the difference between exposing environment variables in nextjs through the next.config.js vs with the NEXT_PUBLIC prefix?
根据 nextjs
文档,如果我想 expose my environment variables to the browser 我可以在我的 .env.local
文件中用 NEXT_PUBLIC
作为前缀,就像这样:
NEXT_PUBLIC_VAR=7
但是,看起来我可以 也 使用 next.config.js
将我的环境变量暴露给浏览器,如下所示:
module.exports = {
env: {
PUBLIC_VAR: process.env.PUBLIC_VAR,
},
}
这将 add to the javascript bundle
这两种策略有什么区别?
两者之间的区别在于,一个使用 .env 文件,而另一个使用 next.config 文件。自 Next.js 9.4 起,现在支持使用 .env 文件加载环境变量。
但是,为了澄清你问题中的一件事,.env 文件中的所有环境变量都不必以 NEXT_PUBLIC
为前缀,只有你想暴露给浏览器的那些,没有的前缀只能在服务器上访问。
NEXT_PUBLIC
是新增功能。之前,为了设置环境变量,我们必须为服务器和客户端设置。
放在 .env 文件中的环境变量只能在服务器端使用,如果你想让你的环境变量在客户端可用,你必须使用 next.config.js
。我们在这里遵循关注点分离原则。
有了 NEXT_PUBLIC
,环境变量将在客户端和服务器端都可用。使用 NEXT_PUBLIC
设置的 env 变量将暴露给浏览器。
所以总而言之,将前缀 NEXT_PUBLIC
添加到您的环境变量与通过 next.config.js
.
向浏览器公开您的环境变量具有相同的效果
他们没有太大区别。
试试这个:
将其放入 .env 或 env.development 文件。不要 next.config.js
MY_VAR=10
然后 运行 这个:
console.log("MY var",process.env.MY_VAR);
在客户端组件和 getServerSideProps
函数中。
如果你检查浏览器控制台,你会看到 undefined
,但在终端上你会看到
MY var 10
根据 nextjs
文档,如果我想 expose my environment variables to the browser 我可以在我的 .env.local
文件中用 NEXT_PUBLIC
作为前缀,就像这样:
NEXT_PUBLIC_VAR=7
但是,看起来我可以 也 使用 next.config.js
将我的环境变量暴露给浏览器,如下所示:
module.exports = {
env: {
PUBLIC_VAR: process.env.PUBLIC_VAR,
},
}
这将 add to the javascript bundle
这两种策略有什么区别?
两者之间的区别在于,一个使用 .env 文件,而另一个使用 next.config 文件。自 Next.js 9.4 起,现在支持使用 .env 文件加载环境变量。
但是,为了澄清你问题中的一件事,.env 文件中的所有环境变量都不必以 NEXT_PUBLIC
为前缀,只有你想暴露给浏览器的那些,没有的前缀只能在服务器上访问。
NEXT_PUBLIC
是新增功能。之前,为了设置环境变量,我们必须为服务器和客户端设置。
放在 .env 文件中的环境变量只能在服务器端使用,如果你想让你的环境变量在客户端可用,你必须使用 next.config.js
。我们在这里遵循关注点分离原则。
有了 NEXT_PUBLIC
,环境变量将在客户端和服务器端都可用。使用 NEXT_PUBLIC
设置的 env 变量将暴露给浏览器。
所以总而言之,将前缀 NEXT_PUBLIC
添加到您的环境变量与通过 next.config.js
.
他们没有太大区别。
试试这个:
将其放入 .env 或 env.development 文件。不要 next.config.js
MY_VAR=10
然后 运行 这个:
console.log("MY var",process.env.MY_VAR);
在客户端组件和 getServerSideProps
函数中。
如果你检查浏览器控制台,你会看到 undefined
,但在终端上你会看到
MY var 10