You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vite+Vue3生产环境变量访问问题求助(部署至Cloud Run)

问题解决指南

1. 修复Dockerfile的COPY错误

你当前Dockerfile第一行的COPY ./.env.production/ /存在两个问题:

  • 目标路径错误:应该将env文件复制到项目工作目录,而非根目录
  • 源路径错误:你指定的是目录.env.production/,但实际是文件.env.production

修改后的Dockerfile(如果项目根目录存在.env.production文件):

# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
# 复制env文件到工作目录
COPY .env.production ./
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]

如果项目中没有.env.production文件,直接删除那行COPY命令,改用构建传参的方式注入变量。

2. 解决Cloud Run环境变量无效问题

Vite的import.meta.env.VITE_*变量是构建阶段静态注入的,Cloud Run控制台设置的是运行时环境变量,对已构建完成的静态文件完全无效。必须在Docker构建过程中传入变量,才能让Vite打包时将其注入代码。

方法一:Cloud Build构建传参

编写cloudbuild.yaml配置文件,将变量作为构建参数传入:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [
    'build',
    '--build-arg', 'VITE_STORYBLOK_ACCESS_TOKEN=$_STORYBLOK_TOKEN',
    '-t', 'gcr.io/$PROJECT_ID/your-app-image',
    '.'
  ]
# 可在Cloud Build触发器中动态设置该替换变量,避免明文暴露
substitutions:
  _STORYBLOK_TOKEN: "your-storyblok-access-token"
images:
- 'gcr.io/$PROJECT_ID/your-app-image'

同时修改Dockerfile,添加ARG声明接收构建参数并转为环境变量:

# build stage
FROM node:lts-alpine as build-stage
# 声明构建参数
ARG VITE_STORYBLOK_ACCESS_TOKEN
# 将参数转为环境变量,Vite会自动读取带VITE_前缀的变量
ENV VITE_STORYBLOK_ACCESS_TOKEN=$VITE_STORYBLOK_ACCESS_TOKEN
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]

方法二:Secret Manager存储敏感变量(推荐)

如果变量是敏感信息(如访问令牌),禁止明文写入配置,使用Google Cloud Secret Manager:

  1. 将VITE_STORYBLOK_ACCESS_TOKEN存入Secret Manager(命名为storyblok-access-token)
  2. 修改cloudbuild.yaml,构建前拉取密钥并传入:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['secrets', 'versions', 'access', 'latest', '--secret=storyblok-access-token', '--format="value(payload.data)"', '|', 'base64', '-d', '>', 'secret.txt']
  id: 'fetch-secret'
- name: 'gcr.io/cloud-builders/docker'
  args: [
    'build',
    '--build-arg', 'VITE_STORYBLOK_ACCESS_TOKEN=$(cat secret.txt)',
    '-t', 'gcr.io/$PROJECT_ID/your-app-image',
    '.'
  ]
images:
- 'gcr.io/$PROJECT_ID/your-app-image'

3. 验证变量注入

构建完成后,可通过以下方式验证:

  • 本地运行镜像,查看浏览器控制台中import.meta.env.VITE_STORYBLOK_ACCESS_TOKEN的值
  • 检查Cloud Run部署后的静态JS文件,搜索变量名确认已被注入

内容的提问来源于stack exchange,提问作者Steven Diffey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:53:40