Я создаю приложение для реагирования, и мне нужно получить данные из моего api, теперь я хочу сохранить URL-адрес api в качестве переменной среды. У меня есть файл .env, установлен dotenv, вот мой код process.env.API_URL возвращает undefined.
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.info(process.env.API_URL)
return (
<div>
<Home/>
</div>
);
}
}
export default App;
Чтобы добавить еще одну причину: убедитесь, что в вашем коде реакции нет функции / переменной с именем process.





Вероятно, вам нужно будет вызвать в dotenv.config(), как предлагает документ
Если вы используете приложение create-response-app, вам не нужен пакет dotenv. Вам нужно будет добавить префикс REACT_APP_ к имени переменной в файле .env. См. Документ здесь
Здесь следует отметить три вещи
переменная должна быть с префиксом с REACT_APP_
например: REACT_APP_WEBSITE_NAME=hello
Вам необходимо рестарт на сервере, чтобы отразить изменения.
Убедитесь, что у вас есть файл .env в папке корень (там же, где у вас package.json), а НЕ в папке src.
После этого вы можете получить доступ к переменной, например, process.env.REACT_APP_SOME_VARIABLE
Дополнительные советы
; или запятую , в конце каждой строки.Подробнее здесь (мой собственный пост) и официальный документы
сэкономленные часы усилий.
номер 3 спас меня!
Номер 2 меня спас! Не знал, что вам нужно перезапустить сервер, чтобы отразить изменения .env. Спасибо!
Огромное спасибо! Был действительно запутан тем, что означает папка корень
Необходимость в префиксе с "REACT_APP_" исправила это для меня. Спасибо!
Число 3 спасло день
Спасибо @kianvj Я отложил это на несколько дней, но теперь он работает. Было бы безумием создавать приложение без работающего файла .env
спасибо за информацию, господин :) "REACT_APP_" это было то, что я искал
Необходимость в префиксе с фиксированным "REACT_APP_" для меня безумие.
в CRA префикс REACT_APP_ - это должен, а не должен. См. Вторую ссылку, предоставленную op: «Помимо нескольких встроенных переменных (NODE_ENV и PUBLIC_URL), имена переменных должны начинаться с REACT_APP_, чтобы работать».
Также убедитесь, что ваш терминал, откуда вы запускаете, находится в исходном корневом каталоге.
Привет, спасибо, парень, что я сделал и работал, так это создал файл 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
Затем я импортирую где угодно в компоненте и получаю свои данные.
Еще одна возможная ловушка, в которую я попал, заключалась в том, чтобы определить переменные не в папке create-react-app, а в папке выше (где находится Node server / backend .env). Убедитесь, что вы не делаете этого, потому что вы потратите драгоценное время, как я сделал сегодня.
Привет, я использую Heroku для размещения своего стека MERN, и я считаю, что Heroku хранит все переменные env в корне (где находится сервер / бэкэнд Node), но теперь React больше не получает доступ к переменным env. Вы знаете, как я могу предоставить моей папке / client (React) доступ к переменным env в Heroku?
Убедитесь, что вы использовали префикс REACT_APP для каждой переменной.
Убедитесь, что имена переменных в файле .env совпадают с именами в
.
ваш файл js. Например, REACT_APP_KEY в .env по сравнению с
process.env.REACT_APP_KY
// Wrong:
REACT_APP_KEY=”AHEHEHR”
// Right:
REACT_APP_KEY=AHEHEHR
Добавьте префикс REACT_APP_ в переменные среды React.
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"
Если приведенные выше решения не работают для вас, проверьте, где находится ваш файл ".env". Как и в моем случае, все, что я сделал правильно, но ошибка в том, что я поместил ".env" вне каталога моего проекта, из-за чего я получаю сообщение об ошибке.
Примечание. Ваш файл ".env" должен находиться в том же каталоге, что и ваш "package.json".
попробуйте также очистить кеш.
npx react-native start --reset-cache
В моем случае это очень помогает. Также не забудьте начать имя вашего ключа с REACT_APP_YOUR_NAME_KEY
ИСПРАВИТЬ:
в 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 имеет это несоответствие
НЕ СОХРАНЯЙТЕ И НЕ ИСПОЛЬЗУЙТЕ КЛЮЧИ API ВО ФРОНТЕНДНОМ КОДЕ, ПОСКОЛЬКУ ЭТО ЛЕГКО ПРОЧИТАЕТСЯ С ПОМОЩЬЮ ИНСТРУМЕНТОВ DEV
Сохранение ключей API в .env и их использование в приложении React по-прежнему будет незащищенным, поскольку ключ API можно прочитать из DevTools.
Используйте простой бэкэнд-код, который будет действовать как прокси для вашей службы.
Отправьте необходимые данные через запрос, а затем серверная часть должна использовать эти данные, включая ключ API, хранящийся на сервере, а затем сделать запрос какой-либо конкретной службе, которой нужен этот ключ API.
Не нужно ставить префикс REACT_APP_, просто определите свою среду -
.env.development, например - API_URL=http://example.com.env должно работатьЗатем используйте то же самое в своем файле JS, что и process.env.API_URL
Примечание: Я тестировал это на React JS v16.8
Решение:
1. Удалите двойные кавычки. ("...").
2. Префикс Должен быть REACT_APP для каждой переменной.
Правильно:
REACT_APP_API_URL=http://localhost:8002
Надеюсь, это сработает.
при вызове переменной .env из файла JS
вам нужно вызвать его по префиксу process.env., прежде чем записывать переменную .env
таким образом это будет выглядеть как process.env.REACT_APP_NOT_SECRET_CODE
и не забудьте начать имя переменной с префикса REACT_APP_, как упоминалось в предыдущих ответах, иначе React проигнорирует его по соображениям безопасности.
Если вы используете dev-сервер на локальном хосте, знайте, что .env здесь не работает, вам необходимо развернуть веб-сайт на «обычном» сервере, это причина безопасности, чтобы не позволять браузеру видеть .env при постановке.
Вы используете сборку Webpack или приложение create-react-app? Обычно переменные среды загружаются как часть процесса сборки, обычно это процесс Node. Код, который вы пытаетесь запустить выше, запускается в браузере. И .env не упакован!