В React, в коде приложения, можно использовать переменные окружения. Например, для подключения к базе данных, мы можем в коде задать адрес подключения в виде переменной, вместо того, чтобы хардкодить ссылку. При этом разные значения можно использовать во время разработки и во премя выполнения в продуктиве.
Adding Custom Environment Variables
НАПРИМЕР: вместо https://some-domain.com/api/ можно было бы указать process.env.REACT_APP_API_URL
// hardcoded URL
const instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
headers: {'X-Custom-Header': 'foobar'}
});
// Environment variable URL
const instance = axios.create({
baseURL: process.env.REACT_APP_API_URL,
timeout: 1000,
headers: {'X-Custom-Header': 'foobar'}
});
Хранить значение этой переменно можно либо в переменной окружения операционной системы, либо в специальном .env файле, в корневой папке React приложения. Либо передавать во время запуска приложения:
package.json
"scripts": {
"start": "cross-env NODE_ENV=production NODE_OPTIONS=--openssl-legacy-provider HTTPS=true PORT=443 react-scripts start",
"dev": "cross-env NODE_ENV=development HTTPS=true PORT=443 react-scripts start",
"build": "react-scripts build"
},
Простой пример .env файла:
REACT_APP_API_URL = http://localhost:5000/api
React воспринимает переменные которые начинаются на REACT_APP. Всё остальное он игнорирует в целях безопасности. Во время сборки (build), в коде приложения, переменные вида process.env.REACT_APP_API_URL заменяются их значениями. Файлы .env принято добавлять в .gitignore, всё с тойже целью безопасности. Поэтому, если вы соберёте ваш проект, который использует переменные окружения, но при этом не зададите их в своём окружении или в файле .env, то во время выполнения переменные будут иметь значение undefined. С такой проблемой часто можно столкнуться во время сборки проекта в CI/CD, используя докер или сторонние сервисы типа Heroku.
Ещё раз обращаю внимание, что после сборки (npm build) или запуска (npm start) приложения, переменные окружения будут жётско прописаны в коде. И если вы измените их в файле или в окружении вашей операционной системы, то вам придётся пересобрать или перезапустить ваше приложение, соответственно.
Помимо .env можно использовать и другие файлы. Например, если вам нужно, чтобы в продуктиве ваше приложение собиралось с одними занчениями, а во время разработки с другими, то можно использовать .env.development во время разработки (npm start), а .env.production, во время сборки (npm build). Если все эти файлы используются одновременно, то порядок их чтения следующий - файлы слева имеют больший приоритет:
npm start:.env.development.local,.env.local,.env.development,.envnpm run build:.env.production.local,.env.local,.env.production,.envnpm test:.env.test.local,.env.test,.env(обратите внимание.env.localотсутствует)
Улучшение командной строки в PowerShell, WSL, Windows Terminal и VS Code