如何从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
相关产品推荐
相关产品推荐

