Использование переменных среды в приложении React

Наш ресурс JavaScript просто закрылся, поэтому мне, ничего не зная о фронтенд-разработке, нужно, чтобы мой пользовательский интерфейс встал. Я пытаюсь использовать переменную среды в javascript, и кажется, что есть 100 различных способов сделать это.

Все, что я знаю, это приложение для реакции / узла. Запускаю с npm run start. Ему нужна конечная точка, которую я определил в моем .bash_profile, XREFS_BACK_URL. Я думал, что могу просто использовать process.env.XREFS_BACK_URL, но, видимо, это должно быть определено в каком-то файле? Я не знаю, в каком файле и где он должен находиться.

Извините за то, что я невежественен - ​​он только что приземлился мне на колени, и мне нужно быстро его поднять!

Обновлять:

Я создал файл .env в корневом каталоге. Это одна строка:

REACT_APP_XREFS_BACK_URL=http://localhost:8080

В своем коде я пытаюсь использовать это так:

var endpoint = process.env.REACT_APP_XREFS_BACK_URL;
console.info("endpoint is " + endpoint);

Но консоль показывает, что endpoint - это UNDEFINED.

Мой package.json здесь:

{
  "name": "bulletin-board",
  "version": "0.0.1",
  "private": true,
  "devDependencies": {
    "babel-jest": "^22.4.1",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "jest": "^22.4.2",
    "react-scripts": "0.2.1",
    "react-test-renderer": "^16.2.0",
    "webpack": "^4.6.0"
  },
  "dependencies": {
    "font-awesome": "^4.7.0",
    "match-sorter": "^2.2.1",
    "namor": "^1.0.1",
    "npm": "^6.0.0",
    "react": "^15.2.1",
    "react-dom": "^15.2.1",
    "react-draggable": "^2.2.0",
    "react-table": "^6.8.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "eject": "react-scripts eject",
    "test": "jest"
  },
  "jest": {
    "scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
    "moduleFileExtensions": [
      "js",
      "json",
      "jsx"
    ],
    "moduleNameMapper": {
      "^.*[.](jpg|JPG|gif|GIF|png|PNG|less|LESS|css|CSS)$": "EmptyModule"
    },
    "preprocessorIgnorePatterns": [
      "/node_modules/"
    ],
    "unmockedModulePathPatterns": [
      "<rootDir>/node_modules/react",
      "<rootDir>/node_modules/react-dom",
      "<rootDir>/node_modules/react-addons-test-utils",
      "<rootDir>/EmptyModule.js"
    ]
  },
  "eslintConfig": {
    "extends": "./node_modules/react-scripts/config/eslint.js"
  }
}

вы используете webpack? если так, есть вещи, которые их берут и сжигают.

Daniel A. White 01.05.2018 21:46

Я не верю, что я ...

CNDyson 01.05.2018 21:46

вызывает ли сценарий start package.json react-scripts?

azium 01.05.2018 21:49

Да, он вызывает скрипты реакции.

CNDyson 01.05.2018 21:50

ах бинго ... у вас действительно старая версия сценариев реакции. попробуйте обновить свои сценарии реакции и перезапустить. npm install --save-dev [email protected]

azium 01.05.2018 22:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
1 043
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Ваше приложение было создано с помощью create-react-app. Вот документы для добавления / ссылки на переменные среды: https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#adding-custom-environment-variables

Создайте в корневой папке файл с именем .env с содержимым:

REACT_APP_XREFS_BACK_URL=put_whatever_here

Затем получите доступ к этой переменной в своем JavaScript через:

process.env.REACT_APP_XREFS_BACK_URL

Я поместил файл .env в корень приложения, но REACT_APP_XREFS_BACK_URL по-прежнему остается UNDEFINED.

CNDyson 01.05.2018 21:56

ты перезапустил приложение?

azium 01.05.2018 21:56

Обещаю, что сделал!

CNDyson 01.05.2018 21:57

Можете ли вы обновить свой вопрос с помощью файла .env, кода, в котором вы его регистрируете на консоли, и версии react-scripts в вашем package.json

azium 01.05.2018 21:58

это process.env.REACT_APP_XREFS_BACK_URL;, а не process.env.XREFS_BACK_URL;

azium 01.05.2018 22:03

Извините, я думал, что REACT_APP_ был добавлен автоматически. Но это все еще не определено, даже с этим изменением.

CNDyson 01.05.2018 22:06

опубликуйте весь свой package.json. также в каком файле находится ваша консоль? это в папке src?

azium 01.05.2018 22:06

Я просматриваю console.info в окне браузера. Выложу package.json.

CNDyson 01.05.2018 22:07

я знаю, что именно здесь вы ищите журнал ... Я имею в виду, в каком файле этот журнал записан? вы не можете получить доступ к process.env из консоли браузера

azium 01.05.2018 22:08

Я не знаю ни одного файла, в который записывается ... Я не вижу ни одного.

CNDyson 01.05.2018 22:09

также, чтобы уточнить ... ваш package.json также находится в корне?

azium 01.05.2018 22:10

Да, package.json находится в корне папки приложения.

CNDyson 01.05.2018 22:11

Что вы имеете в виду, когда не знаете, в каком файле записан ваш console.info ... в какой файл ВЫ записали текст console.info("endpoint is " + endpoint); ???

azium 01.05.2018 22:15

Ой, извините, я вас неправильно понял. Это в index.js.

CNDyson 01.05.2018 22:15

Нет. Сначала он пожаловался, что index.html не является общедоступным. Я переместил его туда, и теперь там написано Cannot read property 'thisCompilation' of undefined. Понятия не имею, о чем идет речь. Этот код отлично работал до того, как я попытался добавить env var.

CNDyson 01.05.2018 22:18

ну .... версия сценариев реакции, которая у вас была раньше, к сожалению, не поддерживает переменные среды. Я бы порекомендовал использовать инструмент командной строки create-react-app для формирования нового проекта, чтобы увидеть, как он настроен. может быть, есть всего несколько небольших отличий

azium 01.05.2018 22:22

Вот и получилось! Большое спасибо!! Я бы отдал вам все свои очки, если бы мог !!!

CNDyson 01.05.2018 22:31

проголосовать за мой ответ не повредит: p

azium 01.05.2018 23:18

Чтобы прояснить, почему вы его не видели: «Примечание. Вы должны создать пользовательские переменные среды, начинающиеся с REACT_APP_. Любые другие переменные, кроме NODE_ENV, будут проигнорированы, чтобы избежать случайного раскрытия закрытого ключа на компьютере, который может иметь то же имя. Изменение любых переменные среды потребуют перезапуска сервера разработки, если он работает ".

Marcin 21.02.2019 07:26

Не уверен, если это актуально для вас, CNDyson, но я думаю, что это может быть полезно для новичков, таких как я:

  1. npm install --save dotenv
  2. создать файл .env в корневом каталоге
  3. объявить там REACT_APP_**VARIABLE_NAME** = dont forget about REACT_APP
  4. используйте это так: process.env.REACT_APP_**VARIABLE_NAME**

Настоятельно рекомендую изучить эти ссылки:

https://create-react-app.dev/docs/adding-custom-environment-variables/ - официальная документация

https://www.npmjs.com/package/dotenv - dotenv

Проблема в том, что обычно вы хотите получить доступ к переменным среды, присутствующим на сервере, на котором размещено ваше приложение.

С описанным решением вы никогда не сможете сделать docker run --env FOO = "value of foo" my-org/my-app затем откройте FOO в приложении, например process.env["FOO"].

create-react-app объединяет переменные среды, которые определяются при запуске yarn build.

Если вы хотите, например, получить доступ к переменным среды, определенным в контейнере докера, проверьте: реагировать-envs

image

image

Другие вопросы по теме