将 .env 文件添加到 React 项目

IT技术 reactjs environment-variables api-key
2021-03-30 00:40:16

当我提交到 github 时,我试图隐藏我的 API 密钥,并且我已经浏览了论坛以获得指导,尤其是以下帖子:

如何在 create-react-app 中隐藏 API 密钥?

我进行了更改并重新启动了纱线。我不确定自己做错了什么——我.env在项目的根目录中添加了一个文件(我将其命名为process.env),并在我刚刚将REACT_APP_API_KEY = 'my-secret-api-key'.

我想这可能是我fetch在 App.js 中添加密钥的方式,我尝试了多种格式,包括不使用模板文字,但我的项目仍然无法编译。

任何帮助深表感谢。

performSearch = (query = 'germany') => {
    fetch(`https://api.unsplash.com/search/photos?query=${query}&client_id=${REACT_APP_API_KEY}`)
    .then(response => response.json())
    .then(responseData => {
        this.setState({
            results: responseData.results,
            loading: false
        });
     })
     .catch(error => {
            console.log('Error fetching and parsing data', error);
     });
}

6个回答

4 步

  1. npm install dotenv --save

  2. 接下来将以下行添加到您的应用程序中。

    require('dotenv').config()

  3. 然后.env在应用程序的根目录下创建一个文件并将变量添加到其中。

// contents of .env 

REACT_APP_API_KEY = 'my-secret-api-key'
  1. 最后,添加.env到您的.gitignore文件中,以便 Git 忽略它并且它永远不会出现在 GitHub 上。

如果您使用的是create-react-app,那么您只需要第 3 步和第 4 步,但请记住,变量需要从REACT_APP_它开始工作。

参考:https : //create-react-app.dev/docs/adding-custom-environment-variables/

注意-在 .env 文件中添加变量后需要重新启动应用程序。

参考 - https://medium.com/@thejasonfile/using-dotenv-package-to-create-environment-variables-33da4ac4ea8f

@aqteifan 你不需要添加那个片段,但是 .ENV 文件命名起着至关重要的作用
2021-05-22 00:40:16
我在哪里添加require('dotenv').config()哪个文件?
2021-05-25 00:40:16
@tarzen chuugh 例如,如果我将我的应用程序部署到 AWS 会怎样。由于 .env 是 gitignore 的一部分,它不会被忽略吗?我怎样才能把它包括在内?
2021-06-01 00:40:16
@user2763557 我使用的模式是创建一个.env.example文件,其中布置了 env 键的定义。然后,您可以复制.env.example并创建一个.env文件(在开发和生产中),其中包含您的有效值,例如键、基本 URL 等。您必须将该.env文件添加.gitignore.
2021-06-06 00:40:16
在 .env 文件中添加变量后需要重新启动应用程序。如果您使用“create-react-app”创建反应应用程序,则在变量名称前使用“REACT_APP_”。
2021-06-19 00:40:16

所以我自己是 React 的新手,我找到了一种方法来做到这一点。

此解决方案不需要任何额外的包。

步骤 1 ReactDocs

在上面的文档中,他们提到了在 Shell 中导出和其他选项,我将尝试解释的是使用.env文件

1.1 创建Root/.env

#.env file
REACT_APP_SECRET_NAME=secretvaluehere123

重要说明它必须REACT_APP_ 开头

1.2 访问ENV变量

#App.js file or the file you need to access ENV
<p>print env secret to HTML</p>
<pre>{process.env.REACT_APP_SECRET_NAME}</pre>

handleFetchData() { // access in API call
  fetch(`https://awesome.api.io?api-key=${process.env.REACT_APP_SECRET_NAME}`)
    .then((res) => res.json())
    .then((data) => console.log(data))
}

1.3 构建环境问题

因此,在我执行步骤 1.1|2 后它不起作用,然后我找到了上述问题/解决方案。React 会在构建时读取/创建 env,因此每次修改 .env 文件时都需要npm run start以便更新变量。

在我看来,这是正确的答案!不需要额外的包,以及导入环境变量的正确 React 方式。其他方法也可以,但是既然已经为您完成了,为什么还要添加包和代码配置呢?很好的答案!
2021-06-01 00:40:16
由于某种原因,这对我不起作用。我得到undefined
2021-06-04 00:40:16
我错过了这个REACT_APP_谢谢。没有其他人提到它。
2021-06-09 00:40:16
我已经尝试了一切。process.env.REACT_APP_API_KEYundefined
2021-06-13 00:40:16
@T04435 我已经有了伙伴 我指的是我需要为每个服务器设置不同的 .env 文件吗?
2021-06-18 00:40:16

今天有一种更简单的方法可以做到这一点。

只需在根目录中创建 .env.local 文件并在那里设置变量。在你的情况下:

REACT_APP_API_KEY = 'my-secret-api-key'

然后你以这种方式在你的 js 文件中调用它:

process.env.REACT_APP_API_KEY

React 支持环境变量,因为 react-scripts@0.5.0 。你不需要外部包来做到这一点。

https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env

*注意:我建议使用 .env.local 而不是 .env 因为 create-react-app 在创建项目时将此文件添加到 gitignore。

文件优先级:

npm start: .env.development.local, .env.development, .env.local, .env

npm run build: .env.production.local, .env.production, .env.local, .env

npm 测试:.env.test.local、.env.test、.env(注意 .env.local 丢失)

更多信息:https : //facebook.github.io/create-react-app/docs/adding-custom-environment-variables

正确的命名为我完成了这项工作。我使用了 .env.dev 而 React 在寻找 .env.development 时又回到了 .env
2021-05-24 00:40:16
一个技巧是重启服务器才能正常工作
2021-06-10 00:40:16
最简单和最好的!
2021-06-21 00:40:16

Webpack 用户

如果你使用 webpack,你可以安装和使用dotenv-webpack插件,按照以下步骤操作:

安装包

yarn add dotenv-webpack

创建.env文件

// .env
API_KEY='my secret api key'

将其添加到webpack.config.js文件中

// webpack.config.js
const Dotenv = require('dotenv-webpack');

module.exports = {
  ...
  plugins: [
    new Dotenv()
  ]
  ...
};

在您的代码中使用它作为

process.env.API_KEY

有关更多信息和配置信息,请访问此处

@AminuKano,是的,这很清楚地解释了这一点。谢谢
2021-05-30 00:40:16
@LinasM。是的,当然,但是“在线”是什么意思?
2021-06-09 00:40:16
如果您使用 webpack-devserver,则在重新启动它之前您不会看到更改。
2021-06-13 00:40:16
@Aminu Kano 如果我在源代码中在线查看 bundle.js 文件时 api-key 仍然可见,请向我解释使用这种方法有什么意义?
2021-06-17 00:40:16
这对我来说是最好的解决方案。谢谢。一个注意事项:我正在使用服务器端渲染,所以我必须更新两个 webpack 文件(客户端也是)。
2021-06-21 00:40:16

1.在根文件夹中创建.env文件

有些来源更喜欢使用.env.development.env.production但这不是强制性的。

2. 你的变量名 - 必须 - 以 REACT_APP_YOURVARIABLENAME 开头

看来,如果您的环境变量不是这样启动的,那么您就会遇到问题

3. 包括你的变量

包含您的环境变量只需放在您的代码中 process.env.REACT_APP_VARIABLE

您不必安装任何外部依赖项

我做了同样的事情,但它在控制台中显示未定义
2021-05-28 00:40:16
如果您获得的值未定义,请再次重新编译。
2021-05-31 00:40:16
重新编译后仍然未定义。 console.log('process', process.env.REACT_APP_BASE_URL);
2021-06-13 00:40:16
确保您的根文件夹中有 .env 文件(与 package.json 相同的位置),而不是 src 文件夹中。
2021-06-13 00:40:16