У меня есть один и тот же образ докера с моим vuejs (с vite), развернутым в трех разных средах (этап, qa и prod) с kubernetes, в этих трех средах у меня есть одна и та же переменная среды с тремя разными значениями, например: на этапе у меня есть VITE_APP_URL=test1, в qa у меня VITE_APP_URL=test2, а в prod VITE_APP_URL=test3. В моем коде у меня есть следующие строки для получения значения: import.meta.env.VITE_APP_URL но когда я проверяю переменную, она ничего не возвращает. Я хотел бы знать, есть ли способ получить переменную среды на моем фронте, которая находится на сервере.
Это мой Dockerfile, если он может помочь:
FROM node:20.10 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# étape de production
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY ./nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]


Опция 1
Переменная окружения жестко запрограммирована в файле Dockerfile. Это не кажется идеальным. См. вариант 2 ниже.
FROM node:20.10 as build-stage
ENV VITE_APP_URL=test2
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Вариант 2
Имейте коллекцию файлов среды, соответствующий выбранному во время сборки.
Например:
🗎 .env-staging
VITE_APP_URL=test1
🗎 .env-qa
VITE_APP_URL=test2
🗎 .env-prod
VITE_APP_URL=test3
Измените Dockerfile следующим образом:
FROM node:20.10 as build-stage
ARG ENV_FILE
ENV ENV_FILE=${ENV_FILE}
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN cp ${ENV_FILE} .env && \
npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Теперь вы указываете соответствующий файл среды в качестве аргумента сборки, используя любой из следующих вариантов.
docker build --build-arg ENV_FILE=.env-staging -t vite-app .
docker build --build-arg ENV_FILE=.env-qa -t vite-app .
docker build --build-arg ENV_FILE=.env-prod -t vite-app .
Спасибо, я использовал вариант 2, и он отлично работает!
В документации говорится: «Vite предоставляет переменные env в специальном объекте import.meta.env, которые статически заменяются во время сборки». Таким образом, они получают значения, которые у них есть во время сборки. Вы не можете установить их во время выполнения.