欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue項(xiàng)目多租戶環(huán)境變量的設(shè)置

 更新時(shí)間:2023年04月20日 09:16:45   作者:jerry_kong  
本文主要介紹了vue項(xiàng)目多租戶環(huán)境變量的設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

問(wèn)題

在vue項(xiàng)目中,在 .env 文件內(nèi),以 VUE_APP*開(kāi)頭的變量,可以在項(xiàng)目源碼中使用,在編譯階段由編譯器靜態(tài)替換為對(duì)應(yīng)值;假如項(xiàng)目依賴一個(gè)sso地址,生產(chǎn)環(huán)境是 sso.xxx.com ,測(cè)試環(huán)境是sso-test.xxx.com, 那么我們可以再 .env 文件 中 寫(xiě)入 VUE_APP_API_SSO_URL=https://sso.xxx.com,在 .env.test 寫(xiě)入 VUE_APP_API_SSO_URL=https://sso-test.xxx.com,這種將不同的環(huán)境寫(xiě)入到 不同的配置文件方案,很好的適配了不同環(huán)境;

但是 如果 要部署給給個(gè)企業(yè)呢,每個(gè)企業(yè)地址都不同?我們今天討論如何解決;

策略

vue-cli在編譯vue項(xiàng)目,環(huán)境變量是寫(xiě)入到.env文件中的,是我們提前準(zhǔn)備好的;僅應(yīng)用有某個(gè)企業(yè),因此我們是否可以 node.js 去操作去讀取 另外一份配置文件,將新內(nèi)容 寫(xiě)入 .env 文件內(nèi)呢?

一句話,不同企業(yè)以及多套環(huán)境,寫(xiě)到配置文件中,編譯前 動(dòng)態(tài)生成 .env 文件;

修改編譯命令

package.json 中增加 evn 命令行,生成新的 .env;

"scripts": {
    "env":"node config/generateEnv.js", // 生成環(huán)境變量
    "dev": "npm run env && vue-cli-service serve", // 本地開(kāi)發(fā)啟動(dòng)命名入口
    "build": "npm run env && vue-cli-service build", // 遠(yuǎn)程編譯部署命令
 }

坑,最初在 vue.config 中調(diào)用 generateEnv.js 文件生成.env,文件內(nèi)容正確,沒(méi)由于命令啟動(dòng)時(shí),已加載了文件,總是慢一步,導(dǎo)致達(dá)不到預(yù)期,一次此處分開(kāi)兩個(gè)步驟,獨(dú)立完成;

核心生成文件

generateEnv.js 文件

const fs = require('fs');
const path = require('path');

const loadedModules = {};

// process.env.TENANT = 'tenant01';
// process.env.APP_ENV = 'test';

function loadModule(moduleName) {
? if (loadedModules[moduleName]) {
? ? return loadedModules[moduleName];
? }
? const modulePath = `./tenant/${moduleName}.js`;
? try {
? ? const module = require(modulePath);
? ? loadedModules[moduleName] = module;
? ? return module;
? } catch (error) {
? ? console.error(`Failed to load module ${moduleName}: ${error}`);
? ? return null;
? }
}

// jenkins中會(huì)定義 process.env.TENANT 和 process.env.APP_ENV 兩個(gè)變量值;
const tenantName = process.env.TENANT || 'defaultTenant';
// 加載指定租戶的配置文件
const tenantData = loadModule(tenantName);

/**
?* 生成環(huán)境變量.env 文件;生成特定租戶對(duì)應(yīng)環(huán)境參數(shù)
?* @param {*} param
?*/
function generateEnv(mode) {
? console.log('mode = ', mode);
? const fileName = path.join(__dirname, '../.env');
? // 先同步刪除
? try {
? ? fs.unlinkSync(fileName);
? ? console.log('.env 文件已成功刪除');
? } catch (err) { }

? const envModel = tenantData[mode];
? const envDefault = tenantData.env || {};
? // 延續(xù) .env 和 evn.[mode] 合并順序,.env 中存儲(chǔ)公共默認(rèn)的,evn.[mode] 存儲(chǔ)有差異的;
? const envVars = { ...envDefault, ...envModel };

? // 將環(huán)境變量對(duì)象轉(zhuǎn)換為字符串形式
? const envString = Object.entries(envVars)
? ? .map(([key, value]) => `${key}=${value}`)
? ? .join('\n');
? try {
? ? fs.writeFileSync(fileName, envString);
? ? console.log('以下是 新生成 .env 文件內(nèi)容\n');
? ? console.log('-----bengin-------\n');
? ? console.log(envString);
? ? console.log('\n-----end-------');
? ? console.log('\n.env ?coinfig file successfully!');
? } catch (err) {
? ? console.error(err);
? }
}

/**
?* 生成 .env 環(huán)境文件;
?* jenkins中會(huì)定義 process.env.TENANT 和 process.env.APP_ENV 兩個(gè)變量值;
?* 參數(shù) 包括本地開(kāi)發(fā)和服務(wù)器環(huán)境
?* 值包括:{
? * development: '本地開(kāi)發(fā)',
? * dev: '開(kāi)發(fā)環(huán)境',
? * test: '測(cè)試環(huán)境',
? * prd: '生產(chǎn)環(huán)境',
? * };
? ?本地開(kāi)發(fā) 是沒(méi)有 process.env.TENANT 和 process.env.APP_ENV 兩個(gè)變量的,并且為了本地開(kāi)發(fā)方便,默認(rèn)生成 development 環(huán)境下變量值;但如果 防止 Jenkins 中未定義,更建議你更改為 prd;
?*/
generateEnv(process.env.APP_ENV || 'development');

其中兩個(gè)變量 TENANT、APP_ENV是 Jenkins 中 自定義的 選項(xiàng)參數(shù),分別代表企業(yè)名稱和運(yùn)行環(huán)境;

注意: 參數(shù)可以注入到 node.js 中 process.env中來(lái),我之前是不知道還可以這么玩,問(wèn)了chatGPT說(shuō)是可以使用,你們可以在vue.config文件中 增加一行 consle.log(process.env) ,然后查看Jenkins的輸出確認(rèn);

最終是可以獲取到值得;

  • process.env.APP_ENV
  • process.env.TENANT

配置文件

我的配置文件在 tenant目錄下,每個(gè)企業(yè)一個(gè)文件,多含多個(gè)環(huán)境節(jié)點(diǎn);以下是例子其中一個(gè)企業(yè)的文件配置,文件名等于 process.env.TENANT
變量 process.env.APP_ENV 指定運(yùn)行環(huán)境;

/**
?* NODE_ENV: 節(jié)點(diǎn)不要添加,不會(huì)生效
?*/
?module.exports = {
? /**
? ?* 默認(rèn)配置,所有環(huán)境中存在且值相同時(shí),在此處配置,各對(duì)應(yīng)環(huán)境 無(wú)需配置
? ?* 使用 Object.assign 合并數(shù)據(jù),各環(huán)境 是 Object.assign 最后一個(gè)參數(shù),覆蓋同名鍵值
? ?*/
? env: {
? ? // 數(shù)據(jù)接口連接地址
? ? VUE_APP_API_BASE_URL: '/api-agent',
? ? // 公鑰
? ? VUE_APP_PUBLIC_KEY: '',
? ? // SSO地址
? ? VUE_APP_API_SSO_URL: 'https://sso.***.com/',
? ? // 文件預(yù)覽服務(wù)器地址
? ? VUE_APP_PREVIEW_SERVER: 'https://view.***.com/view/url',
? },
? // 本地開(kāi)發(fā)
? development: {
? ? // 數(shù)據(jù)接口連接地址
? ? VUE_APP_API_BASE_URL: 'http://**-dev.***.com/api-agent',
? ? // SSO地址
? ? VUE_APP_API_SSO_URL: 'https://sso-dev.***.com/',
? },
? // 開(kāi)發(fā)環(huán)境
? dev: {
? ? ? // 數(shù)據(jù)接口連接地址
? ? VUE_APP_API_BASE_URL: 'http://**-dev.***.com/api-agent',
? ? // SSO地址
? ? VUE_APP_API_SSO_URL: 'https://sso-dev.***.com/',
? },
? // 測(cè)試環(huán)境
? test: {
? ? // 數(shù)據(jù)接口連接地址
? ? VUE_APP_API_BASE_URL: 'http://**-test.***.com/api-agent',
? ? // SSO地址
? ? VUE_APP_API_SSO_URL: 'https://sso-test.***.com/',
? },
? // 生產(chǎn)環(huán)境
? prd: {
? // 一般情況很少配置,讀取env節(jié)點(diǎn)

? },
};

總結(jié)

最終 我們?cè)诰幾g之前,根據(jù) Jenkins 傳入的 企業(yè)和環(huán)境,生成一份新的 .env文件,提供給 編譯環(huán)境使用,以此完成動(dòng)態(tài)配置;

到此這篇關(guān)于vue項(xiàng)目多租戶環(huán)境變量的設(shè)置的文章就介紹到這了,更多相關(guān)vue 多租戶環(huán)境變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Vue2.0和Typescript實(shí)現(xiàn)多主題切換的示例

    基于Vue2.0和Typescript實(shí)現(xiàn)多主題切換的示例

    本文主要介紹了基于Vue2.0和Typescript實(shí)現(xiàn)多主題切換的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Vue?privide?和inject?依賴注入的使用詳解

    Vue?privide?和inject?依賴注入的使用詳解

    這篇文章主要介紹了Vue?privide?和inject?依賴注入的用法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Vue實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車功能

    Vue實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Vue extends 屬性的用法示例詳解

    Vue extends 屬性的用法示例詳解

    這篇文章主要為大家介紹了Vue extends 屬性的用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • vue移動(dòng)端實(shí)現(xiàn)左滑編輯與刪除的全過(guò)程

    vue移動(dòng)端實(shí)現(xiàn)左滑編輯與刪除的全過(guò)程

    vue.js是現(xiàn)在流行的js框架之一,vue 是一套用于構(gòu)建用戶界面的漸進(jìn)式j(luò)avascript框架,這篇文章主要給大家介紹了關(guān)于vue移動(dòng)端實(shí)現(xiàn)左滑編輯與刪除的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • vue element實(shí)現(xiàn)將表格單行數(shù)據(jù)導(dǎo)出為excel格式流程詳解

    vue element實(shí)現(xiàn)將表格單行數(shù)據(jù)導(dǎo)出為excel格式流程詳解

    這篇文章主要介紹了vue element實(shí)現(xiàn)將表格單行數(shù)據(jù)導(dǎo)出為excel格式流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-12-12
  • element?ui?watch?el-input賦值之后無(wú)法刪除或修改問(wèn)題

    element?ui?watch?el-input賦值之后無(wú)法刪除或修改問(wèn)題

    這篇文章主要介紹了element?ui?watch?el-input賦值之后無(wú)法刪除或修改問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • vue項(xiàng)目中axios配置方式(代理配置)

    vue項(xiàng)目中axios配置方式(代理配置)

    這篇文章主要介紹了vue項(xiàng)目中axios配置方式(代理配置),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vue中如何運(yùn)用TS語(yǔ)法

    Vue中如何運(yùn)用TS語(yǔ)法

    本文主要介紹了Vue中如何運(yùn)用TS語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Vue cli構(gòu)建及項(xiàng)目打包以及出現(xiàn)的問(wèn)題解決

    Vue cli構(gòu)建及項(xiàng)目打包以及出現(xiàn)的問(wèn)題解決

    這篇文章主要介紹了Vue cli構(gòu)建及項(xiàng)目打包以及出現(xiàn)的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論