被 Next.js 的环境变量给坑了一把...

开发 前端
在 Next.js 中,执行 next dev​ 命令时需要确保 NODE_ENV​ 为 development​。执行 next start​和 next build​ 命令时需要确保 NODE_ENV​ 为 production。

最近在使用 Next.js 时遇到了一个问题,最后原因竟是 .env 取值问题,为这个问题花费了数小时的时间,希望看到这篇文章的朋友,如果遇到类似问题,不要重蹈覆辙吧。

起初报错内容如下所示:

图片图片

一开始关注点在下面这行:

Generating static pages (0/10)  [==  ] ⨯ TypeError: Cannot read properties of null (reading 'useContext')

看到这个报错以为只是 useContext Hook 的使用问题,看了代码后也没看出什么问题并且在同事的电脑试过了没有此问题,这就很难办了!

怀疑是否是版本问题,升级到最新的 V14.0.1 还是没能解决。之后在 Next.js Issue 下搜索相关关键词,确实找到了类似的提问,例如:?issues#57277、?issues#52478、?discussions#43577,截止目前没看到好的解决办法,还在讨论这个问题。

之后,注意到控制台有以下警告信息。

图片图片

根据提示看了下详细内容,注意到了下面标注的这句话,大概意思是如果未设置标准的 NODE_ENV 环境变量可能会导致依赖关系出现意外行为。

图片图片

这个 “意外行为” 就很难讲了,说不定真和上面的报错有关系,在执行 next build 时,打印了 NODE_ENV 环境变量发现被修改为了 development。在代码层面我是没有设置的,后来查了下本机的 ~/.zshrc 文件,发现这里设置了 NODE_ENV 环境变量为 development,才导致的 next build 时环境变量取值继承了本机设置的环境变量。

尝试修改命令为 NODE_ENV=production next build,结果成功了。但这种神奇的构建问题,对用户体验是真的不够好。

下面对 Next.js 环境变量的一些规则做个总结

在 Next.js 中,执行 next dev 命令时需要确保 NODE_ENV 为 development。执行 next start和 next build 命令时需要确保 NODE_ENV 为 production。

按照 Next.js 官网给的建议,在我们的代码仓库最好有三个文件:

  • .env(所有环境)
  • .env.development(开发环境)
  • .env.production(生产环境)

注意环境变量的加载顺序,Next.js 按以下顺序查找环境变量,一旦找到变量就停止。

  • process.env
  • .env.$(NODE_ENV).local
  • .env.local
  • .env.$(NODE_ENV)
  • .env

关于环境变量更多内容参考 Next.js 文档 ?https://nextjs.org/docs/app/building-your-application/configuring/environment-variables

责任编辑:武晓燕 来源: 编程界
相关推荐

2024-09-18 00:00:01

ChatGPTOpenAI工具型

2022-10-13 18:54:57

JavaScriptQwikReact

2022-02-22 20:48:48

RemixNext.js框架

2021-06-09 08:21:14

Webpack环境变量前端

2024-09-20 15:37:02

2024-05-09 09:01:03

2021-12-27 08:31:42

Next.js SSRSSG

2024-09-04 10:27:53

2024-04-28 10:56:34

Next.jsWeb应用搜索引擎优化

2024-02-05 11:55:41

Next.js开发URL

2024-03-05 19:17:37

2020-12-14 11:40:27

Next.js SSRReact

2024-03-29 08:32:01

Node.jsNext.js组件

2024-01-04 14:16:05

腾讯红黑树Socket

2023-09-20 10:14:03

Next.js前端

2021-11-26 10:29:24

jsRemix开源

2024-03-04 07:33:39

RemixReact框架

2024-11-15 08:12:48

Next.js内容管理系统Sanity

2021-01-04 09:06:18

Next.js设计技巧

2023-11-16 07:43:26

Next.jsReact
点赞
收藏

51CTO技术栈公众号