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

如何从PM2向Nuxt 3传递环境变量?变量无法访问求助

Nuxt 3 + PM2 环境变量无法访问的解决办法

可能的原因及解决步骤

1. 确认Nuxt3的环境变量读取逻辑

Nuxt3对环境变量的读取分场景处理,需对应配置:

  • 服务器端代码:可直接用process.env.NUXT_HOST读取,但如果通过useRuntimeConfig()获取变量,必须先在nuxt.config.ts中配置runtimeConfig:
    export default defineNuxtConfig({
      runtimeConfig: {
        // 仅服务器端可用的私有变量
        NUXT_HOST: process.env.NUXT_HOST,
        NUXT_PORT: process.env.NUXT_PORT,
        public: {
          // 客户端、服务器端均可用的公开变量
          NUXT_BASE_URL: process.env.NUXT_BASE_URL
        }
      },
      // 直接配置服务器参数,覆盖默认值
      server: {
        host: process.env.NUXT_HOST || 'localhost',
        port: process.env.NUXT_PORT || 3000
      }
    })
    
    在组件或插件中获取变量时,需使用:
    const config = useRuntimeConfig()
    console.log(config.NUXT_HOST) // 仅服务器端可见
    console.log(config.public.NUXT_BASE_URL) // 两端均可见
    

2. 验证PM2环境变量是否传递到进程

在server/index.mjs最顶部添加日志打印,确认变量是否进入进程:

console.log('当前进程环境变量:', process.env.NUXT_HOST, process.env.NUXT_PORT)

执行pm2 logs frontend查看日志:

  • 如果能打印出变量值,说明问题出在Nuxt的配置或读取方式;
  • 如果打印undefined,执行pm2 reload ecosystem.config.js重启加载配置,同时检查PM2启动目录下的脚本路径是否正确。

3. 排查构建阶段的环境变量影响

若你提前执行nuxt build构建应用,需注意:

  • 构建时nuxt.config.ts中使用的process.env变量会被静态替换为构建时的值,而非运行时PM2传递的变量;
  • 如需运行时动态读取变量,必须通过runtimeConfig配置,避免直接在配置文件中依赖构建时的环境变量。

4. 确认PM2脚本路径正确性

你的PM2配置中script: './frontend/server/index.mjs'是相对路径,需确保执行pm2 start的目录下该路径真实存在。若路径错误,启动的可能不是目标应用,导致环境变量无效。


内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:26:28