【问题标题】:next.js environment variables are undefined (Next.js 10.0.5)next.js 环境变量未定义(Next.js 10.0.5)
【发布时间】:2022-01-21 09:39:23
【问题描述】:

我正在使用 Next.js 编写一个网站,并尝试添加 Google 跟踪代码管理器。
我按照 Next.js Github 示例的教程进行操作,但由于某些原因,我无法访问我的环境变量。
它说我的变量是未定义的。
我在我的项目文件夹中创建了一个 .env.local 文件(与组件、node_modules、页面等处于同一级别)
在这个文件中,我创建了一个这样的变量(测试目的):

NEXT_PUBLIC_DB_HOST=localhost

在我的索引页面上,我尝试了以下代码:

console.log("test ", process.env.NEXT_PUBLIC_DB_HOST);

但在我的控制台中,我得到一个“未定义的测试”。
我试图将我的变量放入 .env 文件中,但没有成功。
我做错了什么?

【问题讨论】:

  • 您是否尝试过重新加载下一个服务器?
  • 我不确定你的意思。我停止了我的 vscode 终端中的内容并再次进行了纱线开发。重新加载下一个服务器还有什么事情要做吗?
  • 是的,就是这样。它没有帮助吗?您确定.env 文件与package.json 处于同一级别吗?不太确定还有什么可以帮助的。
  • 好吧,我傻了!我发现我的错误......我放了一个“:”而不是一个“=”。我很惭愧……
  • 非常感谢@FlorieAnstett 我犯了同样的错误,浪费了2个多小时

标签: javascript environment-variables next.js undefined


【解决方案1】:

此环境仅适用于服务器端。要在客户端访问此环境,您需要在 next.config.js 中声明

这边:

module.exports = {
  reactStrictMode: true,
  env: {
    BASE_URL: process.env.BASE_URL,
  }
}

【讨论】:

  • 从 Nextjs 版本 9.4 开始,不再建议将 next.config.js 作为环境策略。您是在使用旧版本的 NextJS,还是认为这是获得成功的唯一途径?
  • 我只是遇到了这个问题,这解决了我在 Next 10.0.3 上的错误
  • 在 Next +9 上,使用 NEXT_PUBLIC_ 为变量添加前缀。这将在浏览器上公开它们。
【解决方案2】:

重新启动服务器对我有用。

  1. 编辑和保存 .env.local
  2. 停止服务器并重新启动它,npm run dev
  3. 您应该在下一行得到如下输出:
> klout@0.1.0 dev
> next dev

Loaded env from [path]/.env.local

【讨论】:

  • 谢谢,这正是我所需要的。
  • 重启是服务器是关键
【解决方案3】:
  1. 创建.env(所有环境).env.development(开发环境)和.env.production(生产环境) .

  2. 将前缀 NEXT_PUBLIC 添加到所有环境变量中。

NEXT_PUBLIC_API_URL=http://localhost:3000/

  1. 与前缀 process.env 一起使用

process.env.NEXT_PUBLIC_API_URL

  1. 停止服务器并重新启动它:

npm 运行开发

  1. 我希望它有效。 此解决方案适用于最新版本的 nextJs(9 以上)

【讨论】:

    【解决方案4】:

    在这上面花费了无数小时后,我发现在 nextjs 9.4 前后文档中都有一个很小的段落:

    关键词是BUILD TIME。这意味着您必须在运行 next build 而不是(仅)在 next start 时设置这些变量,以便客户端可以访问这些变量。

    【讨论】:

    • 呃,这对我来说是关键。我已经使用 npm 脚本设置了这些变量,但它是在构建时间之后,但在启动我的服务器之前。
    【解决方案5】:

    对于那些使用 NextJS +9 并在浏览器中查找环境变量的用户,您应该使用 NEXT_PUBLIC_ 前缀。示例:

    NEXT_PUBLIC_ANALYTICS_ID=123456789
    

    documentation for reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-04
      • 2021-03-30
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2021-01-23
      • 2021-03-18
      相关资源
      最近更新 更多