前置知识: vite
中多环境配置
- vite中,我们在
package.json
中配置mode后,就可以在代码中使用import.meta.env
,获取不同.env文件的环境配置信息
"scripts": {
"serve": "vite", //未指定默认取.env中的配置
"dev": "vite --mode dev", // 取 .env.dev文件中的配置
"pro": "vite --mode pro", // 取 .env.pro文件中的配置
"build": "vue-tsc --noEmit && vite build", //未指定默认取.env中的配置
"build:dev": "vue-tsc --noEmit && vite build --mode dev", // build的时候取dev的配置
"build:pro": "vue-tsc --noEmit && vite build --mode pro", // build的时候取pro的配置
"preview": "vite preview"
},
// 使用
console.log(import.meta.env)
// {mode:xxx,......}
如何配置可参考: vite中环境变量的使用与配置(非常详细)
但在nuxt
中无法在package.json
中直接改变import.meta.env的mode
nuxt build
的mode是固定的 productionnuxt dev
的mode固定是 developmentnuxt generate
的mode是固定的 production
"scripts": {
"build": "nuxt build --mode test", // 结果还是取.env.production配置
"dev": "nuxt dev --mode production", // 结果还是取.env.development配置
"generate": "nuxt generate --mode test", // 结果还是取.env.production配置
},
在nuxt中配置多环境确实是个十分头疼的问题
如何解决nuxt多环境配置
本次测试项目使用nuxt3搭建
经过多次调试,我终于发现了更方便的解决方案,不需要下载插件,不用在代码内进行判断,仅需几行代码
主要原理:
import.meta.env
会自动获取process.env
中VITE_
开头的信息,因此只需要在process.env中添加环境信息即可
nuxt.config.ts
// 环境变量配置
import { loadEnv } from 'vite'
const envName = process.env.npm_lifecycle_script.match(/--mode\s(.*)/)?.[1]
const envData = loadEnv(envName, process.cwd()) // 获取.env文件中的配置
Object.assign(process.env,envData) // 将环境配置信息,添加到process.env
package.json
"scripts": {
"build": "nuxt build",// 未指定默认取.env.production文件中的配置
"build:pre": "nuxt build --mode test",// 取 .env.test中的配置
"dev": "nuxt dev",// 未指定默认取.env.development中的配置
"dev:pro": "nuxt dev --mode production",// 取 .env.production中的配置
"generate:pre": "nuxt generate --mode test",// 取 .env.test中的配置
"generate": "nuxt generate --mode production",
"preview": "nuxt preview"
},
使用:
- 项目中直接调用
import.meta.env
,如:
request.ts
const service: AxiosInstance = axios.create({
baseURL: import.meta.env.VITE_APP_SERVICE_URL as string,
timeout: 30000,
})
注意:在.env文件中需要使用VITE_开头
VITE_APP_HAMBIT_IMG_HOST = "xxx"
VITE_APP_IMG_HOST = "xxx"
VITE_APP_SERVICE_URL = 'xxxx'
附:nuxt环境配置的常规解决方案
网上关于nuxt环境配置的方案很多,这里列举其中的部分
方法1.使用cross-env配置环境变量
- 使用cross-env更改环境变量,再判断当前环境变量,使用不同的环境配置。
方法2.将环境配置信息放入publicRuntimeConfig中
- 将环境信息放到配置中,在其他地方通过useRuntimeConfig获取
参考:nuxt3中配置不同开发环境以及如何使用(配置环境变量)