Next.js 应用程序在构建时捆绑环境变量。这就是为什么我需要将环境变量作为参数传递并在构建阶段使用它们的原因。现在,作为 CD/CI 管道的一部分,我想通过在 compose.yaml 中声明的环境变量动态传递参数。但是,在构建时不会读取来自 Compose 文件的环境变量。事实上,终端会打印以下消息:
time="2024-12-12T23:35:10-05:00" level=warning msg="未设置“NEXT_PUBLIC_GRAPHQL_SERVER”变量。默认为空字符串。"
Compose.yaml
services:
frontend:
build:
context: ./frontend
args:
- NEXT_PUBLIC_GRAPHQL_SERVER=${NEXT_PUBLIC_GRAPHQL_SERVER}
env_file:
- ./frontend/.env
environment:
NODE_ENV: production
NEXT_PUBLIC_GRAPHQL_SERVER: http://localhost:3000/
ports:
- 8080:8080
docker文件:
FROM base AS builder
WORKDIR /usr/src/app
COPY --from=deps /usr/src/app/node_modules ./node_modules
COPY . .
ARG NEXT_PUBLIC_GRAPHQL_SERVER
ENV NEXT_PUBLIC_GRAPHQL_SERVER=${NEXT_PUBLIC_GRAPHQL_SERVER}
RUN npm run build
当我在 args 中明确设置环境变量时,一切都正常,但这不是所需的工作流程。
services:
frontend:
build:
context: ./frontend
args:
- NEXT_PUBLIC_GRAPHQL_SERVER=http://localhost:3000/