首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过带有next.config.js前缀的NEXT_PUBLIC vs公开nextjs中的环境变量有什么区别?

通过带有next.config.js前缀的NEXT_PUBLIC vs公开nextjs中的环境变量有什么区别?
EN

Stack Overflow用户
提问于 2022-01-19 02:12:46
回答 2查看 4.4K关注 0票数 5

根据nextjs文档,如果我想要向浏览器公开我的环境变量。,可以在向浏览器公开我的环境变量。文件中以NEXT_PUBLIC作为前缀,如下所示:

代码语言:javascript
运行
复制
NEXT_PUBLIC_VAR=7

但是,我似乎也可以通过使用next.config.js向浏览器公开环境变量,如下所示:

代码语言:javascript
运行
复制
module.exports = {
  env: {
    PUBLIC_VAR: process.env.PUBLIC_VAR,
  },
}

这将是添加到javascript包中

这两种策略有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-19 07:01:19

NEXT_PUBLIC是一个新增加的特性。以前,为了设置环境变量,我们必须分别设置服务器和客户端。

放置在.env文件中的环境变量只能在服务器端可用,如果要使env变量在客户端可用,则必须使用next.config.js。我们这里遵循的是分离关注原则。

但是在next.config中为浏览器设置env变量是不必要的。这是客户端env在next.config.js中的一个示例:

代码语言:javascript
运行
复制
module.exports = {
  env: {
    AUTH0_NAMESPACE: process.env.AUTH0_NAMESPACE,
    BASE_URL: process.env.BASE_URL
  }
}

使用NEXT_PUBLIC,env变量将在客户端和服务器端都可用.使用NEXT_PUBLIC设置的env变量将公开给浏览器。因此,请确保不向浏览器公开敏感数据。

因此,总之,向环境变量添加前缀NEXT_PUBLIC与通过next.config.js向浏览器公开环境变量具有相同的效果。

试试这个:

把这个放到.env或env.development文件中。不是next.config.js

代码语言:javascript
运行
复制
 MY_VAR=10

然后运行以下命令:

代码语言:javascript
运行
复制
    console.log("MY var",process.env.MY_VAR);

客户端组件和getServerSideProps函数。如果您检查浏览器控制台,您将得到undefined,但在终端上,您将看到

代码语言:javascript
运行
复制
MY var 10
票数 8
EN

Stack Overflow用户

发布于 2022-01-19 02:27:28

两者的区别在于,其中一个使用.env文件,而另一个使用next.config文件。从Next.js 9.4开始,现在支持用.env文件加载环境变量。

但是,为了澄清问题中的一件事,.env文件中的所有环境变量都不必以NEXT_PUBLIC作为前缀,只有您希望暴露在浏览器中的环境变量,任何没有该前缀的环境变量都只能在服务器上访问。

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

https://stackoverflow.com/questions/70764556

复制
相关文章

相似问题

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