У меня есть докер-контейнер с настройкой нескольких переменных среды. Я знаю, что в типичном случае использования React не может прочитать эти переменные, так как переменные process.env
заменяются во время переноса.
Я пытаюсь обойти это без необходимости раскручивать внутренний серверс помощью плагина под названием реагировать-env .
Основная идея заключается в создании файла .env
, который можно записать в сценарий bash
. Сценарий bash
скопирует все переменные среды в файл .env
. Плагин сгенерирует файл env.js
, который затем будет использоваться приложением React во время выполнения.
В моей настройке я создал две примерные переменные среды.
REACT_APP_SETUP="OK"
-в коде .env
. REACT_APP_GCP_PROJECT_ID="SOMEID"
- для записи в файл bash.
.env
# .env
REACT_APP_SETUP="OK" //prewritten env for testing.
docker-entrypoint.sh
#!/bin/sh
printf "\n" >> /usr/app/.env
//env that is supposed to be copied.
printf 'REACT_APP_GCP_PROJECT_ID="%s"' SOMEID >> /usr/app/.env
serve build
Dockerfile
# Base version
FROM node:9
# Install yarn
RUN npm install yarn
# Install serve.js
RUN yarn global add serve
# Create app directory
WORKDIR /usr/app
# Copy all necessary files and grant permissions.
# - yarn.lock
# - package.json
# - .env
# - docker-entrypoint.sh
COPY . /usr/app/
COPY yarn.lock /usr/app
COPY package.json /usr/app
COPY .env /usr/app
COPY docker-entrypoint.sh /usr/app/docker-entrypoint.sh
RUN chmod 777 /usr/app/docker-entrypoint.sh
# Install dependencies.
RUN yarn
# Build application.
RUN yarn build
# Set entrypoint of application.
ENTRYPOINT [ "/usr/app/docker-entrypoint.sh" ]
App.jsx
...
console.log(env("SETUP"));
console.log(env("GCP_PROJECT_ID"));
...
Inspect Console
OK
undefined
В приведенном выше примере настройки мы можем видеть, как плагин работает, так как докеризованное приложение генерирует env.js
для приложения React, следовательноOK
консольный вывод.
Однако я не могу получить файл bash для записи в файл .env
, таким образом вывод консоли undefined
.
exec
при входе в контейнер также показывает файл .env
, содержащий записи REACT_APP_GCP_PROJECT_ID="SOMEID"
и REACT_APP_SETUP="OK"
.
Я подозреваю, что env.js
генерируется до bashФайл имеет возможность записи в файл .env
.
Как я могу записать в мой файл .env
, чтобы плагин мог генерировать файл env.js
, из которого мое приложение может считывать переменные среды?