为什么runtimeConfig在Nuxt 3中看不到环境变量?

问题描述 投票:0回答:5
  1. 我做
    yarn build
    没有
    .env
    文件
  2. .env
    文件添加到项目中
  3. 我愿意
    yarn start
  4. useRuntimeConfig().public.baseURL
    打印到控制台并获得
    undefined

为什么运行时不跟踪我的环境变量?

.env

NUXT_PUBLIC_BASE_URL=https://example.com/api/v1

nuxt.config.js

export default defineNuxtConfig({
  runtimeConfig: {
    public: {
      baseUrl: ''
    }
  },

插件/app.js

export default defineNuxtPlugin(() => {
  console.log('baseURL', useRuntimeConfig().public.baseURL
})
vue.js nuxt.js nuxtjs3
5个回答
1
投票

来自文档页面

但是,在您的服务器构建之后,您需要负责在运行服务器时设置环境变量。此时将不会读取您的 .env 文件。对于每个环境,执行此操作的方式都不同。在 Linux 服务器上,您可以使用终端 DATABASE_HOST=mydatabaseconnectionstring node .output/server/index.mjs 将环境变量作为参数传递。或者您可以使用 source .env && node .output/server/index.mjs 获取 env 文件。 请注意,对于纯静态站点,在项目预渲染后无法设置运行时配置。

所以,

source .env && yarn start
应该这样做。


0
投票

你可以检查一下nuxt的版本。

如果是桥接版本,

runtimeConfig
无法使用。

因为我使用@nuxt/bridge,而不是工作。

然后它在

3.0.0-rc.3
版本上运行。我试过了。


0
投票
baseUrl: process.env.NUXT_PUBLIC_BASE_URL

这样尝试一下。您所做的是将其显式设置为空字符串。


0
投票

函数 useRuntimeConfig() 是一个问题,为什么您可能在插件或实用程序文件中使用它,执行时出现 odando 错误。 仅在组件和页面上使用它


0
投票

即使您的设置完全遵循文档,但我也经历过这在生产中不起作用。我正在使用 Linux 服务器,并使用 pm2 进行部署。 Bart 已经回答了这个选项:

baseUrl: process.env.NUXT_PUBLIC_BASE_URL

这是最终对我有用的解决方案。虽然这并不是说你设置错了。根据文档,将 baseUrl 设置为空字符串应该是正确的,并且应该被 .env 文件中的值覆盖。但事实并非如此,它适用于开发,但在我的情况下不适用于生产。

Nuxt 似乎不想负责解释如何正确设置它以进行生产,因为每个服务器环境都不同,因此需要考虑很多变量。但我觉得他们至少应该提到这可能在生产中不起作用,以节省开发人员(像我一样)在项目上线时的压力......

© www.soinside.com 2019 - 2024. All rights reserved.