如果我使用 docker-compose 和环境变量在本地构建和运行它,我的 nuxt3 应用程序运行良好。
但是当我将构建的 docker 镜像推送到我的远程生产环境时,我无法在 runtimeConfig 中应用生产环境变量。可能是因为 process.env["SECRET_KEY"] 在构建阶段被替换为“真正的密钥”。
如果我将环境变量命名为 NUXT_PUBLIC_XXXX / NUXT_XXXX,即使在构建映像后我也可以更新 runtimeConfig。
但是当我使用 PaaS 服务进行生产部署时,我无法控制变量命名。因此,我无法为我的远程环境动态提供正确的运行时配置 -> 我总是以在本地机器上的构建阶段设置的本地值结束。(请参见下面示例中的 clientID)
有没有一种方法可以通过 process.env["custom env name"] 设置运行时配置,即使在构建图像之后? 或者您有任何其他想法如何动态提供运行时配置? (我想避免为每个环境构建单独的容器
非常感谢您的投入。非常感谢任何帮助!
#nuxt.config.ts
...
runtimeConfig: {
#in production ENVs are accessible under the key "VCAP_SERVICES", if key is not present the local development env is applied
clientId: process.env["VCAP_SERVICES"] ? process.env["VCAP_SERVICES"]["clientId"] : process.env["UAA_CLIENT_ID"],
secretKey: process.env["NUXT_SECRET_KEY"]
public: {
backendApi: 'http://127.0.0.1:5000', // will be overridden by NUXT_PUBLIC_BACKEND_API environment variable
environment: "production", // will be overridden by NUXT_PUBLIC_ENVIRONMENT environment variable
}
},
可以在运行时提供环境变量(在构建 docker 镜像之后),但前提是遵守以下要求(参见 Nuxt Docs)
运行时配置值在运行时自动替换为匹配的环境变量。有两个关键要求。
- 你想要的变量必须在你的 nuxt.config 中定义。这可确保任意环境变量不会暴露给您的应用程序代码。
- 只有特别命名的环境变量才能覆盖运行时配置属性。也就是说,一个以 NUXT_ 开头的大写环境变量,它使用 _ 来分隔键和大小写变化..