vite 配置优雅写法以及环境变量配置

438 阅读2分钟

项目复杂时,将vite.config.js文件拆分为三个分解然后在根据需求组合起来会更加优雅

vite.config.js

import { defineConfig } from "vite";
import viteBaseConfig from "./vite.base.config";
import viteDevConfig from "./vite.dev.config";
import viteProdConfig from "./vite.prod.config";


const mergerConfig = {
    "serve": () =>{
        console.log("开发环境")
        return {...viteBaseConfig,...viteProdConfig}
    },
    "build": () =>{
        console.log("生产环境")
        return {...viteBaseConfig,...viteDevConfig}
    }
 
}
export default defineConfig(({command}) =>{
    return mergerConfig[command]()
})

这里的 defineConfig是vite提供的,方便在不同编辑器都可以享受到丝滑的配置代码提示函数。

下面的loadEnv是vite提供的读取环境变量的函数,通常接受三个参数

  1. mode:这是一个字符串,表示当前的模式。通常,模式可以是 developmentproduction 或其他自定义模式。Vite 会根据这个模式来加载相应的环境变量文件。
  2. root:这是一个字符串,表示项目的根目录。通常,你可以使用 process.cwd() 来获取当前工作目录,这样 Vite 就能在正确的位置查找环境变量文件。
  3. prefix:这是一个字符串,表示环境变量前缀。只有以这个前缀开头的环境变量才会被加载。通常,这个前缀是空字符串,表示加载所有环境变量。你也可以提供一个自定义前缀,比如 VITE_,以只加载以 VITE_ 开头的环境变量。

import { defineConfig, loadEnv } from "vite";
import viteBaseConfig from "./vite.base.config";
import viteDevConfig from "./vite.dev.config";
import viteProdConfig from "./vite.prod.config";


const mergerConfig = {
    "serve": () =>{
        console.log("开发环境")
        return {...viteBaseConfig,...viteDevConfig}
    },
    "build": () =>{
        console.log("生产环境")
        return {...viteBaseConfig,...viteProdConfig}
    }
 
}
export default defineConfig(({command,mode}) =>{
    const env = loadEnv(mode,process.cwd(),"MB") 
    console.log(env)
    return mergerConfig[command]()
})

它的工作原理是先找到.env文件,把其中的数据变成键值对储存在对象中,然后在.env后拼接上的 mode ,找到对应的环境变量文件,把数据变成键值对存储在对象中,注意!这里会覆盖.env的同名数据,举例如下

KEY = 120
MK = 9
MB = 666

LIU_KEY = 222
MK = 1
MV = 1
MB = 1

不进行过滤

image.png

打印结果如下

image.png

在客户端使用环境变量,直接通过import.meta.env就可以拿到

console.log(import.meta.env)

控制台中没有任何我们书写的环境变量,是因为出于安全考虑,vite不会让不以VITE为前缀的环境变量暴露在客户端

image.png

更改文件代码

LIU_KEY = 222
VITE_MK = 1
MV = 1
MB = 1

image.png

不想以VITE为前缀可以自己进行配置

envPrefix:"LIU"

image.png