Vite中配置環(huán)境變量

關(guān)于Vite環(huán)境變量的配置

vite.config.js中首先在這個配置文件中我們是拿不到import.meta.env的 ,只能通過process.env的方式拿到

新建一個load-env.ts

安裝dotenv幫助我們加載指定的環(huán)境變量 ,我們在目錄下新建如下幾個變量

  • .env,deveopmemt
  • .env.prc
  • .env.production
  • .env.menarini

package.json 中 配置對應(yīng)的腳本

  "scripts": {
    "dev": "vite",
    "dev:prc": "vite serve --mode prc",
    "dev:menarini": "vite serve --mode menarini",
    "build": "vue-tsc --noEmit && vite build",
    "serve": "vite preview"
  }

npm i dotenv

import * as dotenv from "dotenv"
export interface ViteEnv {
    VITE_URL: string;
    VITE_BASE_URL: string;
    VITE_ZIP_NAME: string;
}

// 通過dotenv配置 需要加載指定.env文件 這樣process.env打印到得就是對應(yīng)得文件了 
// 這里的mode是我們啟動時候的參數(shù) npm run dev:prc 得到的mode就是prc
export function loadEnv(mode: string): ViteEnv {
    const ret: any = {};
    // 在使用之前我們先指定加載哪個環(huán)境變量 
    dotenv.config({
        path: `.env.${mode}` // .env.prc
    });
    
    for (const envName of Object.keys(process.env)) {
        let realName = (process.env as any)[envName].replace(/\\n/g, "\n");
        ret[envName] = realName;
        // 向process.env上擴(kuò)展我們定義的VITE環(huán)境變量
        process.env[envName] = realName;
    }
    return ret
}
const regExps = (value: string, reg: string): string => {
    return value.replace(new RegExp(reg, "g"), "");
};

//   根據(jù)環(huán)境變量返回指定得proxy
export function createProxy(targetProxyUrl:string,baseUrl:string) {
    return {
        [`${baseUrl}`]: {
            target: targetProxyUrl,
            changeOrigin: true,
            rewrite: (path: string) => regExps(path,`${baseUrl}`)
        },
    }
}

vite.config.ts

# mode是在這里拿到的
export default ({ command, mode }) => {}

import { loadEnv, createProxy } from "./src/utils/load-env"

const { VITE_URL, VITE_BASE_URL, VITE_ZIP_NAME } = loadEnv(mode)
# proxy部分
 serve: {
      port: 8999,
      proxy: createProxy(VITE_URL, VITE_BASE_URL)
 }

request.ts

request.ts中我們可以通過 import.meta.env 拿到我們在環(huán)境變量文件中的定義的Vite變量

這樣在配置axios的時候

const baseURL = (import.meta.env.VITE_BASE_URL as string)
const service: AxiosInstance = axios.create({
  baseURL,
  timeout: 30 * 1000,
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容