yarn build
没有.env
文件.env
文件添加到项目中yarn start
。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
})
来自文档页面:
但是,在您的服务器构建之后,您需要负责在运行服务器时设置环境变量。此时将不会读取您的 .env 文件。对于每个环境,执行此操作的方式都不同。在 Linux 服务器上,您可以使用终端 DATABASE_HOST=mydatabaseconnectionstring node .output/server/index.mjs 将环境变量作为参数传递。或者您可以使用 source .env && node .output/server/index.mjs 获取 env 文件。 请注意,对于纯静态站点,在项目预渲染后无法设置运行时配置。
所以,
source .env && yarn start
应该这样做。
你可以检查一下nuxt的版本。
如果是桥接版本,
runtimeConfig
无法使用。
因为我使用@nuxt/bridge,而不是工作。
然后它在
3.0.0-rc.3
版本上运行。我试过了。
baseUrl: process.env.NUXT_PUBLIC_BASE_URL
这样尝试一下。您所做的是将其显式设置为空字符串。
函数 useRuntimeConfig() 是一个问题,为什么您可能在插件或实用程序文件中使用它,执行时出现 odando 错误。 仅在组件和页面上使用它
即使您的设置完全遵循文档,但我也经历过这在生产中不起作用。我正在使用 Linux 服务器,并使用 pm2 进行部署。 Bart 已经回答了这个选项:
baseUrl: process.env.NUXT_PUBLIC_BASE_URL
这是最终对我有用的解决方案。虽然这并不是说你设置错了。根据文档,将 baseUrl 设置为空字符串应该是正确的,并且应该被 .env 文件中的值覆盖。但事实并非如此,它适用于开发,但在我的情况下不适用于生产。
Nuxt 似乎不想负责解释如何正确设置它以进行生产,因为每个服务器环境都不同,因此需要考虑很多变量。但我觉得他们至少应该提到这可能在生产中不起作用,以节省开发人员(像我一样)在项目上线时的压力......