nuxt 3.0.0-rc.2:测试环境编译得到process.env.NODE_ENV值错误问题

一、问题描述

今天遇到一个nuxt(版本:3.0.0-rc.2)项目,在测试环境发布后,发现服务端请求的域名居然是正式环境的配置,根据代码走查,怀疑测试环境编译得到的process.env.NODE_ENV值错误导致。

项目具体配置如下:

// package.json
...
"scripts": {
	...
    "build:test": "cross-env NODE_ENV=test nuxt build",
    ...
  },
 ...
// env.js

const env = {
  test: {
    'API_URL': 'http://test-domain'
  },
  production: {
    'API_URL': 'http://prod-domain'
  },
}

export default env[process.env.NODE_ENV]
// plugins/fetch.js

import envConfig from '../env.js'

const fetch = (url, options) => {
  const baseUrl = process.client ? '' : envConfig.API_URL
  const fetchOptions = { ... }
  return new Promise((resolve, reject) => {
    $fetch(url, fetchOptions).then((res) => {
		...
	}
  }
 }

二、问题排查

在执行编译命令是输出process.env.NODE_ENV:

// nuxt.config.ts

console.log(process.env.NODE_ENV)

在这里插入图片描述

而此时编译得到的.output\public\_nuxt\entry-04fcc700.mjs中有关env.js的代码却是production环境。

目前未排查到具体原因,待后续研究。

三、解决方案

采用runtimeConfig,官方文档《Environment Variables and Private Tokens》提到:

The runtimeConfig API exposes values like environment variables to the rest of your application. By default, these keys are only available server-side. The keys within runtimeConfig.public are also available client-side.

那么只需要:

// nuxt.config.ts

import envConfig from './env.js'
export default defineNuxtConfig({
  runtimeConfig : {
    public: {
      API_URL: envConfig.API_URL
    }
  },
  ...
}
// plugins/fetch.js

const fetch = (url, options) => {
  const runtimeConfig = useRuntimeConfig()
  const baseUrl = process.client ? '' : runtimeConfig.public.API_URL
  const fetchOptions = { ... }
  return new Promise((resolve, reject) => {
    $fetch(url, fetchOptions).then((res) => {
		...
	}
  }
 }
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓风伴月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值