最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue項目多租戶環(huán)境變量的設置

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

問題

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

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

策略

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

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

修改編譯命令

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

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

坑,最初在 vue.config 中調用 generateEnv.js 文件生成.env,文件內容正確,沒由于命令啟動時,已加載了文件,總是慢一步,導致達不到預期,一次此處分開兩個步驟,獨立完成;

核心生成文件

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中會定義 process.env.TENANT 和 process.env.APP_ENV 兩個變量值;
const tenantName = process.env.TENANT || 'defaultTenant';
// 加載指定租戶的配置文件
const tenantData = loadModule(tenantName);

/**
?* 生成環(huán)境變量.env 文件;生成特定租戶對應環(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 中存儲公共默認的,evn.[mode] 存儲有差異的;
? const envVars = { ...envDefault, ...envModel };

? // 將環(huán)境變量對象轉換為字符串形式
? const envString = Object.entries(envVars)
? ? .map(([key, value]) => `${key}=${value}`)
? ? .join('\n');
? try {
? ? fs.writeFileSync(fileName, envString);
? ? console.log('以下是 新生成 .env 文件內容\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中會定義 process.env.TENANT 和 process.env.APP_ENV 兩個變量值;
?* 參數(shù) 包括本地開發(fā)和服務器環(huán)境
?* 值包括:{
? * development: '本地開發(fā)',
? * dev: '開發(fā)環(huán)境',
? * test: '測試環(huán)境',
? * prd: '生產環(huán)境',
? * };
? ?本地開發(fā) 是沒有 process.env.TENANT 和 process.env.APP_ENV 兩個變量的,并且為了本地開發(fā)方便,默認生成 development 環(huán)境下變量值;但如果 防止 Jenkins 中未定義,更建議你更改為 prd;
?*/
generateEnv(process.env.APP_ENV || 'development');

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

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

最終是可以獲取到值得;

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

配置文件

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

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

? },
};

總結

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

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

相關文章

  • Vue首屏加載過慢出現(xiàn)長時間白屏的實現(xiàn)

    Vue首屏加載過慢出現(xiàn)長時間白屏的實現(xiàn)

    本文主要介紹了Vue首屏加載過慢出現(xiàn)長時間白屏的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • el-form表單驗證的一些實用方法總結

    el-form表單驗證的一些實用方法總結

    表單校驗是注冊環(huán)節(jié)中必不可少的操作,表單校驗通過一定的規(guī)則來確保用戶提交數(shù)據(jù)的有效性,下面這篇文章主要給大家介紹了關于el-form表單驗證的一些實用方法,需要的朋友可以參考下
    2023-01-01
  • vue3.0+echarts實現(xiàn)立體柱圖

    vue3.0+echarts實現(xiàn)立體柱圖

    這篇文章主要為大家詳細介紹了vue3.0+echarts實現(xiàn)立體柱圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 從vue源碼看props的用法

    從vue源碼看props的用法

    平時寫vue的時候知道 props 有很多種用法,今天我們來看看vue內部是怎么處理 props 中那么多的用法的。非常具有實用價值,需要的朋友可以參考下
    2019-01-01
  • 簡單的Vue異步組件實例Demo

    簡單的Vue異步組件實例Demo

    大家都知道當使用時才裝入需要的組件,可以有效的提高首次裝入頁面的速度。比如在路由切換時,下面這篇文章主要給大家介紹了關于如何實現(xiàn)一個簡單的Vue異步組件的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • vue.js項目中實用的小技巧匯總

    vue.js項目中實用的小技巧匯總

    這篇文章主要給大家介紹了關于vue.js項目中實用的小技巧,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • vue + typescript + 極驗登錄驗證的實現(xiàn)方法

    vue + typescript + 極驗登錄驗證的實現(xiàn)方法

    這篇文章主要介紹了vue + typescript + 極驗 登錄驗證的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Vue路由傳遞參數(shù)與重定向的使用方法總結

    Vue路由傳遞參數(shù)與重定向的使用方法總結

    路由的本質就是一種對應關系,比如說我們在url地址中輸入我們要訪問的url地址之后,瀏覽器要去請求這個url地址對應的資源,下面這篇文章主要給大家介紹了關于Vue路由傳遞參數(shù)與重定向的使用方法,需要的朋友可以參考下
    2022-10-10
  • Vue計算屬性與監(jiān)視(偵聽)屬性的使用深度學習

    Vue計算屬性與監(jiān)視(偵聽)屬性的使用深度學習

    這篇文章主要介紹了Vue計算屬性與監(jiān)視(偵聽)屬性的使用,計算屬性指的是通過一系列運算之后,最終得到一個值,watch監(jiān)視(偵聽)器允許開發(fā)者監(jiān)視數(shù)據(jù)的變化,從而針對數(shù)據(jù)的變化做特定的操作,本文就這兩種屬性給大家詳細講解,感興趣的朋友一起學習吧
    2022-11-11
  • vue監(jiān)聽滾動條頁面滾動動畫示例代碼

    vue監(jiān)聽滾動條頁面滾動動畫示例代碼

    Vue是一套用于構建用戶界面的漸進式框架,與其它大型框架不同的是,Vue?被設計為可以自底向上逐層應用,下面這篇文章主要給大家介紹了關于vue監(jiān)聽滾動條頁面滾動動畫的相關資料,需要的朋友可以參考下
    2023-06-06

最新評論

繁昌县| 塔河县| 根河市| 湾仔区| 寿宁县| 玉门市| 嘉义市| 浮山县| 威远县| 江达县| 永靖县| 石台县| 凤山市| 广安市| 平湖市| 秦皇岛市| 阳东县| 临潭县| 巴林右旗| 饶阳县| 拉萨市| 年辖:市辖区| 铜鼓县| 吴江市| 千阳县| 武安市| 南华县| 遂昌县| 新津县| 迭部县| 晋宁县| SHOW| 莫力| 那曲县| 修武县| 北安市| 新化县| 洪雅县| 垫江县| 从江县| 澄城县|