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

Nuxt3中Pinia Store无法访问useRuntimeConfig及环境变量问题

Nuxt3 环境变量在Pinia中无法访问的解决方案

先确认你的基础配置是正确的

你在nuxt.config.js中对runtimeConfig的配置没问题,public.apiBase已经正确绑定了.env中的NUXT_API_URL,这一步无需修改。


方案一:直接在Pinia Store中使用useRuntimeConfig

注意:必须在Pinia组合式API风格的Store中调用useRuntimeConfig,且要在函数内部(而非顶层变量)执行:

import { defineStore } from 'pinia'

export const useApiStore = defineStore('api', () => {
  // 直接获取runtimeConfig
  const runtimeConfig = useRuntimeConfig()
  const apiBase = runtimeConfig.public.apiBase

  const fetchData = async () => {
    try {
      const response = await fetch(`${apiBase}/your-endpoint`)
      const data = await response.json()
      return data
    } catch (error) {
      console.error('请求失败:', error)
    }
  }

  return { fetchData, apiBase }
})

方案二:通过Composables封装环境变量

创建composables/useEnv.js:

export const useEnv = () => {
  const config = useRuntimeConfig()
  // 只返回需要的公共环境变量,避免暴露敏感信息
  return {
    apiBase: config.public.apiBase
  }
}

在Pinia或组件中直接调用:

import { defineStore } from 'pinia'
import { useEnv } from '~/composables/useEnv'

export const useApiStore = defineStore('api', () => {
  const { apiBase } = useEnv()

  const fetchData = async () => {
    const response = await fetch(`${apiBase}/your-endpoint`)
    // 处理请求逻辑
  }

  return { fetchData }
})

方案三:通过Nuxt插件全局注入环境变量

创建plugins/env-provider.js:

export default defineNuxtPlugin(() => {
  const config = useRuntimeConfig()
  // 注入全局可访问的$env对象
  return {
    provide: {
      env: {
        apiBase: config.public.apiBase
      }
    }
  }
})

在Pinia中通过useNuxtApp获取:

import { defineStore } from 'pinia'
import { useNuxtApp } from '#app'

export const useApiStore = defineStore('api', () => {
  const { $env } = useNuxtApp()

  const fetchData = async () => {
    const response = await fetch(`${$env.apiBase}/your-endpoint`)
    // 处理请求逻辑
  }

  return { fetchData }
})

你之前的错误点说明

  1. Composables写法错误:useRuntimeConfig返回的对象中没有$runtimeConfig属性,直接访问public.apiBase即可,无需额外解构。
  2. defineNuxtPlugin用法错误:该函数是用来定义插件的,不能在普通函数内部这样调用,正确方式是通过provide返回全局可注入的变量。

内容的提问来源于stack exchange,提问作者Amadeo de la Peña

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:48:20