国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

uni-app自定義多環(huán)境配置,動態(tài)修改appid

這篇具有很好參考價值的文章主要介紹了uni-app自定義多環(huán)境配置,動態(tài)修改appid。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

背景

在企業(yè)級項目開發(fā)中,一般都會分為開發(fā)、測試、預(yù)發(fā)布、生產(chǎn)等多個環(huán)境,在工程化中使用不同的打包命令改變環(huán)境變量解決不同環(huán)境各種變量需要手動修改的問題,比如接口請求地址,不同環(huán)境的請求路徑前綴都是不同的。在使用uni-app開發(fā)項目時,一般都是選擇使用HbuilderX可視化創(chuàng)建項目,也不建議使用cli工程化方式創(chuàng)建uni-app項目。在HbuilderX中,默認只支持開發(fā)和生產(chǎn)兩個環(huán)境,點擊“運行”編譯出來的代碼是開發(fā)環(huán)境(development),點擊“發(fā)行”編譯出來的代碼是生產(chǎn)環(huán)境(production),可以通過process.env.NODE_ENV獲取當(dāng)前環(huán)境。但在很多企業(yè)中,可能就2個環(huán)境并不能滿足實際場景,同時在開發(fā)微信小程序時,測試和生產(chǎn)都是不同的appid,每次部署都要手動修改切換很容易出現(xiàn)問題。為了解決上述問題,通過在package.json中增加uni-app擴展節(jié)點,實現(xiàn)自定義條件編譯平臺,讓每種編譯具有不同環(huán)境標(biāo)識。再擴展vite.config.js配置文件,用環(huán)境標(biāo)識判斷重寫文件中的appid。

解決方案

一、創(chuàng)建基礎(chǔ)項目

選擇默認模板,注意vue版本選擇3

uni-app自定義多環(huán)境配置,動態(tài)修改appid,uni-app,微信小程序

二、增加擴展節(jié)點

根據(jù)官方文檔說明,擴展節(jié)點配置說明如下:

{
    /**
     * package.json其它原有配置 
     * 拷貝代碼后請去掉注釋!
     */
    "uni-app": {// 擴展配置
        "scripts": {
            "custom-platform": { //自定義編譯平臺配置,可通過cli方式調(diào)用
                "title":"自定義擴展名稱", // 在HBuilderX中會顯示在 運行/發(fā)行 菜單中
                "browser":"",  //運行到的目標(biāo)瀏覽器,僅當(dāng)UNI_PLATFORM為h5時有效
                "env": {//環(huán)境變量
                    "UNI_PLATFORM": "",  //基準(zhǔn)平臺
                    "MY_TEST": "", // ... 其他自定義環(huán)境變量
                 },
                "define": { //自定義條件編譯
                    "CUSTOM-CONST": true //自定義條件編譯常量,建議為大寫
                }
            }
        }
    }
}

注意:

  • UNI_PLATFORM僅支持填寫uni-app默認支持的基準(zhǔn)平臺,目前僅限如下枚舉值:h5mp-weixin、mp-alipay、mp-baidump-toutiao、mp-qq
  • browser 僅在UNI_PLATFORMh5時有效,目前僅限如下枚舉值:chrome、firefox、ie、edge、safarihbuilderx
  • package.json文件中不允許出現(xiàn)注釋,否則擴展配置無效
  • vue-cli需更新到最新版,HBuilderX需升級到 2.1.6+

實際使用時,暫時不用的變量直接刪除,新建package.json文件,代碼如下:

{
    "uni-app": {
        "scripts": {
            "wx-test": {
                "title":"微信小程序 測試環(huán)境",
                "env": {
                    "UNI_PLATFORM": "mp-weixin",
                    "NAME": "test"
                 }
            },
            "wx-prod": {
                "title":"微信小程序 生產(chǎn)環(huán)境",
                "env": {
                    "UNI_PLATFORM": "mp-weixin",
                    "NAME": "production"
                 }
            },
            "h5-dev": {
                "title":"H5 開發(fā)環(huán)境",
                "browser":"chrome",
                "env": {
                    "UNI_PLATFORM": "h5",
                    "NAME": "development"
                 }
            },
            "h5-test": {
                "title":"H5 測試環(huán)境",
                "browser":"chrome",
                "env": {
                    "UNI_PLATFORM": "h5",
                    "NAME": "test"
                 }
            },
            "h5-prod": {
                "title":"H5 生產(chǎn)環(huán)境",
                "browser":"chrome",
                "env": {
                    "UNI_PLATFORM": "h5",
                    "NAME": "production"
                 }
            }
        }
    }
}

上面代碼片段只以微信小程序和H5兩個端為例,其中只增加了常量NAME用于區(qū)分當(dāng)前環(huán)境,類似于process.env.NODE_ENV獲取環(huán)境變量的作用。一般小程序也就測試和生產(chǎn)兩個環(huán)境,環(huán)境太多都要重新申請賬號也麻煩。H5按照常規(guī)的配置本地開發(fā)、測試、生產(chǎn)三個環(huán)境。配置好后我們點擊頂部菜單欄的“運行”和“發(fā)行”即可看到效果。

uni-app自定義多環(huán)境配置,動態(tài)修改appid,uni-app,微信小程序
uni-app自定義多環(huán)境配置,動態(tài)修改appid,uni-app,微信小程序

當(dāng)在業(yè)務(wù)里需要使用添加的NAME變量時,直接通過process.env.NAME即可獲取。

四、配置其他變量

根目錄下新建config目錄,用于放一些業(yè)務(wù)配置項,再新建環(huán)境相關(guān)變量配置文件env.js,代碼如下:

// 不同的環(huán)境變量配置
const development = {
    requestBaseUrl: 'http://development', 
    appid: '', 
}

const test = {
    requestBaseUrl: 'http://test',
    appid: 'wxd5xxxxee0fce1c81', 
}

const production = {
    requestBaseUrl: 'http://production',
    appid: 'wx3xxxx1ce403cab3', 
}

export default {
    development,
    test,
    production
}

其中變量對象名稱development、test、production要和package.json文件中定義的NAME保持一致,方便后續(xù)通過對象方式直接取值。變量對象中添加的是需要根據(jù)不同環(huán)境配置的變量,比如后端服務(wù)請求地址,小程序appid和一些別的插件key。配置后我們就可以配合環(huán)境NAME獲取到不同環(huán)境的其他變量了,簡單使用方式如下:

import ENV_CONFIG from '@/config/env.js'
console.log(ENV_CONFIG[process.env.NAME].requestBaseUrl)  // 運行H5 開發(fā)環(huán)境結(jié)果 http://development

每次引入獲取方式肯定不夠友好,在uni-app中還可以通過修改vite配置添加全局變量,更方便在全局使用。

首先根目錄下新建vite.config.js文件,內(nèi)容如下:

import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import ENV_CONFIG from './env/index.js'

export default defineConfig({
    plugins: [uni()],
    define: {
        'process.env.config': ENV_CONFIG,
    },
});

通過定義一個全局變量process.env.config,賦值為ENV_CONFIG,process.env.config可以改為任何一個字符串,這里主要是為了保持和默認通過process.env獲取環(huán)境變量的語義一致性。此時使用時就無需在業(yè)務(wù)中單獨引入,從全局對象process.env.config上取值即可:

console.log(process.env.config[process.env.NAME].requestBaseUrl)  // 運行H5 開發(fā)環(huán)境結(jié)果 http://development

五、動態(tài)修改小程序appid

appid是在根目錄下的manifest.json文件中,點擊后最下面有源碼視圖。修改的方式就是運用nodefs模塊,先讀取manifest.json文件,然后根據(jù)當(dāng)前環(huán)境,動態(tài)替換掉appid或者其他參數(shù),最后重新寫入到當(dāng)前目錄下。具體也是在vite.config.js中處理:

import { defineConfig } from 'vite';
import uni from '@dcloudio/vite-plugin-uni';
import ENV_CONFIG from './config/env.js'

// 引入fs模塊
import fs  from 'fs'

// 讀取 manifest.json ,修改后重新寫入
const manifestPath = `${__dirname}/manifest.json`;
let Manifest = fs.readFileSync(manifestPath, { encoding: 'utf-8' });
function replaceManifest(path, value) {
	const arr = path.split('.');
	const len = arr.length;
	const lastItem = arr[len - 1];    
	let i = 0;
	let ManifestArr = Manifest.split(/\n/);

	for (let index = 0; index < ManifestArr.length; index++) {
		const item = ManifestArr[index];
		if (new RegExp(`"${arr[i]}"`).test(item)) ++i;
		if (i === len) {
			const hasComma = /,/.test(item);
			ManifestArr[index] = item.replace(
				new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`),
				`"${lastItem}": ${typeof value === 'string'? '"'+value+'"' : value}${hasComma ? ',' : ''}`
			);
			break;
		}
	}
	Manifest = ManifestArr.join('\n');
}
// 具體使用,找到對應(yīng)key值替換為新的值
// replaceManifest('app-plus.usingComponents', false);

const appid = ENV_CONFIG[JSON.parse(process.env.UNI_CUSTOM_DEFINE).NAME].appid
replaceManifest('mp-weixin.appid', appid);

fs.writeFileSync(manifestPath, Manifest, { flag: 'w' });

export default defineConfig({
    plugins: [uni()],
    define: {
        'process.env.config': ENV_CONFIG,
    },
});

這個修改方案是根據(jù)官方提供的代碼片段修改,其中進行了一些變動:

  • manifest.json文件路徑由相對路徑改為__dirname獲取的絕對路徑
  • replaceManifest方法中的value進行了typeof類型判斷,如果是字符串加上雙引號。因為測試時傳個字符串會替換成沒引號的變量或者數(shù)字

同時關(guān)于當(dāng)前環(huán)境變量的獲取,此時通過process.env.NAME是獲取不到package.json配置的NAME的,通過打印process.env可以發(fā)現(xiàn)此時它是個包含很多變量的json,在UNI_CUSTOM_DEFINE下面是可以找到NAME,這樣就能根據(jù)不同環(huán)境獲取不同的appid。

uni-app自定義多環(huán)境配置,動態(tài)修改appid,uni-app,微信小程序

然后也可以用下面這種更容易理解的方式修改manifest.json,但是修改后內(nèi)容排在一行,想要美觀還需要手動格式化。

// appid獲取只做參考,這里只是說明簡單的只有兩個環(huán)境,可以直接取process.env.NODE_ENV判斷
let appid = process.env.NODE_ENV == "production" ? '生產(chǎn)的appid' : "開發(fā)的appid"
// manifest.json 路徑
let manifestFileUrl = `${__dirname}/manifest.json`
// 讀取文件數(shù)據(jù)
let manifestFileData = fs.readFileSync(manifestFileUrl, { encoding: 'utf8' });
// 移除// 和 /* */注釋
manifestFileData = manifestFileData.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => g ? "" : m)
// // 將txt轉(zhuǎn)成obj
let manifestFileDataObj = JSON.parse(manifestFileData)
// 修改指定key對應(yīng)的value
 manifestFileDataObj['mp-weixin']['appid'] = appid
// 把修改后的對象以json寫入文件
fs.writeFileSync(manifestFileUrl, JSON.stringify(manifestFileDataObj), { encoding: 'utf8' })

六、使用方式

  1. 需要本地調(diào)試時,點擊工具欄“運行”,選擇自定義的對應(yīng)開發(fā)或測試環(huán)境;
  2. 業(yè)務(wù)中通過process.env.config[process.env.NAME]獲取配置的變量對象;
  3. 上線時,點擊工具欄“發(fā)行”,選擇自定義的對應(yīng)測試或生產(chǎn)環(huán)境;

運行環(huán)境

以上代碼是運行在Hbuilderx 3.7.9版本,項目為vue3版本,基于vite構(gòu)建。如在vue2版本上使用,請按照vite.config.js邏輯自行探索配置vue.config.js文件。文章來源地址http://www.zghlxwxcb.cn/news/detail-658614.html

到了這里,關(guān)于uni-app自定義多環(huán)境配置,動態(tài)修改appid的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • uni-app 折疊自定義

    uni-app 折疊自定義

    uni-app的uni-collapse折疊組件樣式修改 下面是修改后的樣式 修改一下uni-collapse的uni-collapse-item 設(shè)計圖樣式 修改后的樣式 就這樣吧…

    2024年02月09日
    瀏覽(32)
  • uni-app - 文本展開 / 收起折疊功能,支持自定義樣式(當(dāng)文本內(nèi)容超出規(guī)定行數(shù)后,展開收起折疊的功能)兼容 H5 / App / 小程序且易用更容易修改的插件組件源碼,超詳細的示例代碼及注釋

    uni-app - 文本展開 / 收起折疊功能,支持自定義樣式(當(dāng)文本內(nèi)容超出規(guī)定行數(shù)后,展開收起折疊的功能)兼容 H5 / App / 小程序且易用更容易修改的插件組件源碼,超詳細的示例代碼及注釋

    網(wǎng)上的組件和教程代碼都太亂了,根本無法按照自己的需求修改,而且基本上都有兼容性和功能性 BUG。 本文實現(xiàn)了 多行文本展開與折疊組件,靈活性非常高,只完成了核心功能,可隨意自定義樣式滿足您的需求, 您只需要一鍵復(fù)制組件源碼,按照詳細的代碼示例,幾分鐘快

    2024年02月07日
    瀏覽(31)
  • uni-app 自定義下拉框

    uni-app 自定義下拉框

    如圖: ? ? html: view class=\\\"row-item\\\" view class=\\\"lable-tit\\\"性別:/view view class=\\\"selected-all\\\" view class=\\\"drop-down-box\\\" @click=\\\"btnShowHideClick\\\" text class=\\\"dropdown-content\\\"{{choiceContent}}/text image class=\\\"dropdown-icon\\\" src=\\\"/static/down.png\\\" mode=\\\"widthFix\\\"/image /view? view class=\\\"dialog-view\\\" v-if=\\\"isShowChoice\\\" text :class=\\\"choiceI

    2023年04月19日
    瀏覽(25)
  • 【uni-app】自定義導(dǎo)航欄

    【uni-app】自定義導(dǎo)航欄

    新手剛玩 uniapp 進行微信小程序,甚至多端的開發(fā)。 原生uniapp 的導(dǎo)航欄,并不能滿足 ui 的需求,所以各種查閱資料,導(dǎo)航欄自定義內(nèi)容 整理如下: 需要修改的文件如下: 1、pages.json 修改pages.json,啟動導(dǎo)航欄自適應(yīng),設(shè)置\\\" navigationStyle\\\": \\\"custom\\\" 2、system_info.js 新建 system_info

    2024年02月16日
    瀏覽(34)
  • uni-app:js修改元素樣式(寬度、外邊距)

    uni-app:js修改元素樣式(寬度、外邊距)

    效果 代碼 1、在 view 元素上添加一個 ref 屬性 ,用于在JavaScript代碼中獲取對該元素的引用:view ref=\\\" myView \\\" id=\\\"mybox\\\"/view 2、獲取元素引用 :const viewElement = this.$refs. myView .$el; 3、修改元素寬度:viewElement.style.width = \\\'100px\\\'; 4、修改元素左外邊距:viewElement.style.marginLeft = \\\'20px\\\'; 這種

    2024年02月07日
    瀏覽(32)
  • 微信小程序修改原生組件樣式(uni-app)

    微信小程序修改原生組件樣式 全局修改,直接將修改的樣式寫在全局的樣式文件中; 特殊情況:修改swiper指示點樣式時,需要包裹在swiper的樣式選擇器下才生效。 直接將下列代碼放在全局樣式中是不會生效的,需要加上swiper組件的元素選擇器或swiper組件的其他樣式名也可。

    2024年02月05日
    瀏覽(105)
  • [uni-app] 微信小程序 如何修改替換頭像

    [uni-app] 微信小程序 如何修改替換頭像

    ?如下圖所示,微信小程序中涉及到修改頭像的交互 技術(shù): 前端應(yīng)用框架為uni-app UI框架為uView ?思考: 1. 頭像點擊事件 click 2.從本地相冊選擇圖片或使用相機拍照 uni.chooseImage(OBJECT) ,方法執(zhí)行成功后根據(jù)success中返回的圖片的本地文件路徑列表 tempFilePaths,做操作 3.上傳圖片

    2024年02月11日
    瀏覽(29)
  • uni-app小程序自定義分享內(nèi)容

    uni-app小程序自定義分享內(nèi)容

    自定義的傳參

    2024年02月01日
    瀏覽(49)
  • uni-app - 文字上下循環(huán)滾動翻滾,類似中獎名單與公告欄信息公示等等,自定義組件封裝,支持 DIY(適用于新聞動態(tài)、公告上下滾動列表、上下循環(huán)滾動,無限上下自動滾動列表)兼容小程序/H5/App

    uni-app是一款使用Vue.js開發(fā)所有前端應(yīng)用的框架,讓開發(fā)者能夠使用Vue.js開發(fā)多端應(yīng)用,具有開發(fā)效率高、易學(xué)易用、性能優(yōu)秀、插件豐富、跨平臺等優(yōu)點。今天,我們將介紹如何使用uni-app實現(xiàn)文字上下循環(huán)滾動,類似于中獎名單或公告欄信息公示等效果。

    2024年02月12日
    瀏覽(230)
  • uni-app uView自定義底部導(dǎo)航欄

    uni-app uView自定義底部導(dǎo)航欄

    因項目需要自定義底部導(dǎo)航欄,我把它寫在了組件里,基于uView2框架寫的(vue2); ? 在components下創(chuàng)建tabbar.vue文件,代碼如下: ?app.vue (有沒有大佬知道為什么這個樣式加載app.vue里才生效) ?pages.json配置 頁面使用: ( mine.vue ) 注: current是底部導(dǎo)航欄的下標(biāo),你在tabb

    2024年02月14日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包