Развертывание приложения react в корзине s3 с несколькими средами

#reactjs #amazon-s3 #axios #environment-variables

Вопрос:

Я использую heroku для развертывания серверной части nodejs, а amazon s3-для развертывания статических файлов приложения react, поэтому интерфейс, хранящийся в корзине s3, запрашивает серверную часть heroku.

Как только я закончил создавать свою промежуточную среду для heroku, мне просто нужно было создать новую корзину и подключить новый URL-адрес, чтобы промежуточный интерфейс мог правильно отправлять запросы в промежуточную серверную, я закончил с чем-то подобным в своем приложении react:

 // index.js let BASE_API_URL;  if (process.env.NODE_ENV === "production") {  BASE_API_URL = "https://myproductionapiurl.com"; else if (process.env.NODE_ENV === "staging") {  BASE_API_URL = "https://mystagingapiurl.s3-website.us-east-2.amazonaws.com"; } else {  BASE_API_URL = "https://someotherurl.com"; }  axios.defaults.baseURL = BASE_API_URL;  

Но потом я заметил, что s3, будучи службой для сохранения ваших статических файлов, не имеет возможности устанавливать переменные среды, поэтому я не могу указать, на основе process.env.NODE_ENV какого URL делать запросы, и я застрял.

Прямо сейчас я просто жестко кодирую URL-адрес, чтобы он работал, но как только я попытаюсь объединить промежуточную и производственную среды, всегда будет возникать конфликт git, есть ли способ сделать это с помощью корзин amazon s3 и реагировать?

Комментарии:

1. Вам пришлось бы сделать это частью процесса сборки , но тогда вы не можете просто продвигать одни и те же артефакты в разных средах (и должны быть в состоянии перестроиться, если появится новая среда).

2. @jonrsharpe я использую npm run build , я не уверен, что задав переменную окружения есть (я.Е NODE_ENV=staging npm run build может сделать трюк, но если это произойдет, я могу добавить, что команда на производство в промежуточной ветке, я не знал, что это была возможность и я стараюсь это прямо сейчас, чтобы увидеть, если это может быть решением 🙂

Ответ №1:

Благодаря @jonrsharpe я смог заставить его работать, так как я использую react вместо использования NODE_ENV (которое нельзя перезаписать) Я использовал REACT_APP_ENV и установил его в качестве переменной среды перед запуском сборки:

REACT_APP_ENV=staging npm run build