我正在构建一个React应用,我需要从我的api中获取数据,现在我想将api url存储为环境变量。我有我的.env文件,我已经安装了dotenv,这是我的代码process.env.API_URL返回未定义。
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Home from '../src/components/Home'
import dotenv from 'dotenv'
import path from 'path'
class App extends Component {
render() {
console.log(process.env.API_URL)
return (
<div>
<Home/>
</div>
);
}
}
export default App;
答案 0 :(得分:10)
在React环境变量上添加前缀REACT_APP _。
apiKey: process.env.REACT_APP_API_KEY
确保.env文件位于根目录中。
src/
.env
.gitignore
package.json
package-lock.json
在.env文件中进行更改后,重新启动开发服务器。
仅复制引号内的值,并且不要忘记删除结尾的逗号(它困扰了我几个小时)。这些示例将给您一个错误。
REACT_APP_API_KEY=Ach2o1invVocSn25FcQhash209,
REACT_APP_API_KEY="Ach2o1invVocSn25FcQhash209",
REACT_APP_API_KEY="Ach2o1invVocSn25FcQhash209"
答案 1 :(得分:7)
确保在每个变量上使用前缀REACT_APP
确认.env文件上的变量名称与
上的变量名称匹配。
您的js文件。例如,.env中的REACT_APP_KEY
与
process.env.REACT_APP_KY
// Wrong:
REACT_APP_KEY=”AHEHEHR”
// Right:
REACT_APP_KEY=AHEHEHR
答案 2 :(得分:5)
这里要注意两件事
REACT_APP_
前缀之后,您可以像这样process.env.REACT_APP_SOME_VARIABLE
答案 3 :(得分:2)
您可能需要按照document的建议致电dotenv.config()
如果您使用create-react-app,则不需要dotenv
软件包。您将需要在REACT_APP_
文件中的变量名称前添加.env
前缀。 See the document here
答案 4 :(得分:1)
如果上述解决方案不适合您,请检查“ .env”文件所在的位置。 就像我的情况一样,我已经正确地完成了所有操作,但是错误是我将“ .env”放在了项目目录之外,这是由于我遇到了错误。
注意:您的“ .env”文件应与“ package.json”位于同一目录。
答案 5 :(得分:1)
尝试清除缓存。
npx react-native start --reset-cache
答案 6 :(得分:1)
就我而言,它有很大帮助。还要记住以 REACT_APP_YOUR_NAME_KEY 开头的密钥名称
答案 7 :(得分:0)
嘿,谢谢我所做的和工作是创建config.js文件
const dev={
API_URL:"http://localhost:300"
}
const prod={
API_URL:"llll"
}
const config=process.env.NODE_ENV=='development'?dev:prod
export default config
然后我将其导入组件中的任何位置并获取我的数据。
答案 8 :(得分:0)
我遇到的另一个可能的陷阱是定义变量,而不是在create-react-app文件夹下,而是在上面的变量(Node server / backend .env所在的位置)中定义。确保您不要那样做,因为您会像我今天一样浪费宝贵的时间。
答案 9 :(得分:0)
添加另一个原因:
检查您的反应代码中没有名为 process
的函数/变量
答案 10 :(得分:0)
修正:
在 babel.config.js 中,如果您使用的是可选配置:
{
"plugins": [
["module:react-native-dotenv", {
"moduleName": "@env",
"path": ".env",
"blacklist": null,
"whitelist": null,
"safe": false,
"allowUndefined": true
}]
]
}
然后你应该导入:
import {API_URL, API_TOKEN} from "@env"
代替:
import {API_URL, API_TOKEN} from "react-native-dotenv"
NPM Package 描述本身存在这种不一致
答案 11 :(得分:0)
不要在前端代码中存储或使用 API 密钥,因为它很容易通过开发工具读取
在 .env 中保存 API 密钥并在您的 React 应用程序中使用它们仍然是不安全的,因为可以从 DevTools 读取 API 密钥。
使用一些简单的后端代码作为服务的代理。
通过请求发送所需的数据,然后后端应使用该数据,包括存储在后端的 API 密钥,然后向需要该 API 密钥的某些特定服务发出请求。
答案 12 :(得分:0)
无需前缀 REACT_APP_
,只需识别您的环境 -
.env.development
中添加一个环境变量,例如 - API_URL=http://example.com
.env
应该可以然后在您的 JS 文件中使用与 process.env.API_URL
相同的内容
注意:我已经在 React JS v16.8 上测试过
答案 13 :(得分:0)
解决方案:
1.去掉双引号。("...").
2.前缀必须在每个变量上REACT_APP。
正确的方法:
REACT_APP_API_URL=http://localhost:8002
我希望它能奏效。