uniapp 多环境配置打包,比较优雅的解决方案
创作时间:
作者:
@小白创作中心
uniapp 多环境配置打包,比较优雅的解决方案
引用
1
来源
1.
https://ask.dcloud.net.cn/article/41550
uniapp的多环境配置打包方案,通过读取不同环境的配置文件(如development、test、staging、production)来实现多环境打包。本文将详细介绍具体的配置步骤和代码示例。
前言
由于uniapp的hbuilder开发工具,只提供了development和production的环境编译方式,一般来说,只能做到development和production两个环境的区分。在实际开发中,我们如果有多个环境开发需求和打包需求,尤其是配置多个环境的接口请求地址等配置。
针对这种情况,我在网上找了很多相关的资料,基本都是命令行的方案,使用uniapp的scripts方案也有,但是是把配置信息写到scripts上的,这解决方案也不够优雅,如果有多个配置就显得很拥肿了。
下面,我们一步一步来配置实现如何根据编译环境读取对应的.env文件加载到项目中。(下面只讲vite配置的方式,webpack的配置方式有空再补充)
配置实现
- 项目根目录,自行新增对应的配置文件
- 在package.json文件添加uni-app的scripts,需要配置几个环境就添加几个,关于这个配置的意思,可以去查看其他相关的文档,这里不展开讲述。
配置好后,点击运行和发行就能看到对应的环境选择项了
此时只是有对应的环境选择项,接下来的思路就是,判断对应的script执行环境,来加载不同的.env配置文件,读取到项目中
- 修改vite.config.js文件,重点看注释
import { loadEnv } from 'vite';
import uni from '@dcloudio/vite-plugin-uni';
// import viteCompression from 'vite-plugin-compression';
// https://vitejs.dev/config/
export default (command, mode) => {//uniapp中,这个mode,不用命令行的添加--mode编译的话,是undefined的
let env = undefined;
if(!mode){//这里是为了确保mode有值,假如开发人员直接在开发工具选择编译到浏览器,也能兼容到
if(process.env.NODE_ENV=='production'){
mode = 'production'
}else{
mode = 'development'
}
}
switch (process.env.UNI_SCRIPT){//这个就是第三步配置的uni-app的script,一一对应判断
case 'dev-h5':
mode = 'development';
break;
case 'test-h5':
mode = 'test'
break;
case 'stage-h5':
mode = 'staging'
break;
case 'prod-h5':
mode = 'production'
break;
}
env = loadEnv(mode, __dirname,"APP")
console.log(`编译${mode}环境`)
console.log(env);//此时已经把env配置读取到了,并且这是个json格式,
return {//别试图在这里定义mode,试过了,在uniapp中不起作用,目前方案只想到了用define来做
envPrefix:'APP_',
plugins: [
uni()
],
server: {
host: true,
// open: true,
port: env.APP_PORT,
hmr: {
overlay: true,
},
},
define:{//根据vite的官方文档,可以把define定义的变量名,在项目编译时,识别项目文件中的这个变量名直接替换成env配置,我们把这个变量放到config.js文件中,对env配置进行集中管理
__VITE_ENV__:JSON.stringify(env)
}
};
};
- 接下来在项目中由一个config.js文件来集中管理env相关的配置,再暴露出来给其他业务模块调用。
至此,uniapp的多环境配置已经完成!!!
如果需要命令行配置打包,可以参考其他的博客,直接配置命令行就可以,命令行写--mode参数即可。
热门推荐
王国保卫战·前线英雄——波恩哈特(骨龙)详细资料与个人分析
脑出血患者康复训练与护理指南
以诗为舟,共赴春天 ——“2025亮马河国际诗歌之夜”成功举办
渐渐变老的70后,后半生最好的活法,就是这三个字
后半生,想要活得久的21个好习惯
王亚平:从农家女到太空教师,她的追梦之旅有多燃?
顽固性失眠的药物治疗方案
AI写作助力毕业鉴定,开启学术新篇章
美国城市排名前十名名单(美国最发达的10个城市)
激发初中生主动参与数学课堂思考的策略
《拳皇》:格斗传奇,青春印记与激情对决的标志
93平花25w打造低成本极简独居住宅
基塘农业模式下不同饲料养殖草鱼的成效分析
期货交易的目的与风险控制全解析
心学问青少年教育,如何帮助孩子建立健康的学习与生活平衡?
广州华林禅寺:追求历史与现代并存的文化殿堂
真心话大冒险:聚会游戏的魅力与社交价值
儿童牙齿过早矫正乱象调查:两岁半幼童竟被要求每天戴12小时牙套
酵素堆肥的制作方法:环保高效的有机肥料生产技术
枕头怎么洗?不同材质的清洗方法全攻略
种红薯放了辛硫磷能吃吗
长音与音阶练习:萨克斯演奏的基础与进阶之道
汽车漏水怎么办?一文详解汽车漏水问题的解决方案
318公路是中国最长最美国道,沿途风景绝佳,进藏必去的最佳路线
从英语培训到资格证书,英国如何与中国做教育和技能发展的合作伙伴?
喝蜂王浆和蜂蜜的好处
西甲焦点战前瞻:赫罗纳主场迎战阿拉维斯,谁能拔得头筹?
烤色琥珀的鉴别方法(探究琥珀真伪)
如何激励员工团队合作
慢跑对于保持中老年人良好的心脏功能