.env 变量 returns 在 React JS 应用程序中未定义

.env variable returns undefined in React JS app

我正在开发这个 React 应用程序并考虑在其中添加一些环境变量,这就是我所做的:

  1. 安装了最新版本的 react-scripts
  2. 在根文件夹中添加了 .env 文件(与 node_modules 文件夹相同的位置)
  3. 添加 REACT_APP_OTHER_OTHER_THING=asdfas 只是为了测试变量
REACT_APP_OTHER_OTHER_THING=asdfas
  1. 打开index.js和console.log(process.env.REACT_APP_OTHER_OTHER_THING)里面看输出
import React from 'react';
import Reactdom from 'react-dom';
import App from './App';

console.log(process.env.REACT_APP_OTHER_OTHER_THING, 'DOTENV')

Reactdom.render(<App/>, document.getElementById("app"))

然后我重新构建了应用程序并启动了应用程序以查看结果 但随后它给出 undefined 作为 process.env.REACT_APP_OTHER_OTHER_THING 的输出。然后我尝试打印 process.env.NODE_ENV (正在工作并打印 "development" 作为输出)。

注意:我也尝试过添加临时变量,正如文档在 https://create-react-app.dev/docs/adding-custom-environment-variables >> 重建服务器和 运行 ($env: REACT_APP_OTHER_OTHER_THING= "abcdef") -and (npm start) << 由于我 运行 在 powershell 上使用它仍然给出未定义的输出。

我能做些什么吗? 谢谢

无法发表评论,所以我会post回答,抱歉。

你确定 ($REACT_APP_OTHER_OTHER_THING= "abcdef") -and (npm start) 吗,因为文档说 ($env:REACT_APP_NOT_SECRET_CODE = "abcdef") -and (npm start)

我刚刚添加了新的环境变量,它给了我未定义的,但在服务器重启后它工作得很好。您可以尝试重新启动服务器,但不是在终端中而是在 .env 文件中添加环境变量吗?

UPD1: 正如你所知,NODE_ENV 是由 npm startnpm run build 命令设置的,它们分别设置为 developmentproduction

正如文档所说:

You cannot override NODE_ENV manually. This prevents developers from accidentally deploying a slow development build to production.

好的,我遇到的问题似乎是我在 React 应用程序中制作的 webpack,

我尝试按照此 article 中的说明进行操作,效果很好!

配置我的 webpack 后,我重建它,重新启动服务器,它工作了!

编辑:对于我的解决方案,我添加了:

const dotenv = require('dotenv');

const env = dotenv.config().parsed;

const envKeys = Object.keys(env).reduce((prev, next) => {
    prev[`process.env.${next}`] = JSON.stringify(env[next]);
    return prev; }, {});

在 webpack.common.js

的顶部

还添加了

    plugins: [
        new webpack.DefinePlugin(envKeys), //this line
    ]

在module.exports 在插件中。我希望这有帮助! :)

确保它有正确的目录树

D:\your-react-project\.env

  • 这里可能 your-react-project \ .env.development

应该在默认README.md放置的路径

这对我有同样的问题。我 double-checked 一切都已正确连接,然后在启动备份后在终端中杀死了我的服务器并且工作正常。

在比 op 的 Webpack 配置问题简单得多的层面上导致未定义环境变量的其他原因包括:

  • 省略 process.env.REACT_APP_SERVER_URL,只在代码中写入 REACT_APP_SERVER_URL

  • 忘记将环境变量命名为 REACT_APP 作为字符串的第一部分