uniapp根据不同的环境配置不同的运行基础路径

前言

当我们使用uniapp开发同一个项目发布不同的环境二级路径不同时,这时候我们就要根据环境来添加运行的基础路径

product:xxx-product-api.xxx.com:9002/productConf...

text:xxx-text-api.xxx.com:9002/textConfig/

但是当我们使用HBuilderX开发时你会发现manifest.json手动配置Web配置时只能配置一个像这种情况

碰到这种情况你会怎么处理?

你是不是会在每次打包发布之前变更该环境对应基础路径?

这样也是一种方法,不过其过程太繁琐,废话不多说,上正文!!!

正文

当我们使用HX创建项目时项目中是没有package.json文件和vue.config.js文件的

  1. 在根目录下创建package.json文件,用于配置多个环境 也可用于Hx自定义发行
js 复制代码
{
    "id": "sin-signature",
    "name": "签名组件-兼容H5、小程序、APP",
    "version": "1.0.0",
    "description": "用于uni-app的签名组件,支持H5、小程序、APP,可导出svg矢量图片。",
    "keywords": ["签名,签字,svg,canvas"],
    
    "uni-app": {  
	   "scripts": {  
	      "h5-dev": {  
	        "title": "H5-DEV",  
	        "env": {  
	          "NODE_ENV": "development",  
	          "UNI_PLATFORM": "h5",  
	          "VUE_APP_BASE_API": "http://192.168.3.3:8081"  
	        },  
	        "define": {  
	          "H5": true  
	        }  
	      },  
	      "h5-xx": {  
	        "title": "H5-XX",  
	        "env": {  
	          "NODE_ENV": "production",  
	          "UNI_PLATFORM": "h5",  
	          "VUE_APP_BASE_API": "http://xxx.xx.xx.xxx:8092"
	        },  
	        "define": {  
	          "H5": true  
	        }  
	      },
		  "h5-test": {
		    "title": "H5-TEST",  
		    "env": {  
		      "NODE_ENV": "production",  
		      "UNI_PLATFORM": "h5",  
		      "VUE_APP_BASE_API": "https://beta-text-api.nextopen.cn"  
		    },  
		    "define": {  
		      "H5": true  
		    }  
		  },  	
	      "h5-prod": {  
	        "title": "H5-PROD",  
	        "env": {  
	          "NODE_ENV": "production",  
	          "UNI_PLATFORM": "h5",  
	          "VUE_APP_BASE_API": "https://product-api.nextopen.cn"  
	        },  
	        "define": {  
	          "H5": true  
	        }  
	      },
		
	  }
}
  1. 在根目录下创建vue.config.js文件,用于处理不同环境配置不同的基础路径
js 复制代码
const fs = require('fs')
//此处如果是用HBuilderX创建的项目manifest.json文件在项目跟目录,如果是 cli 创建的则在 src 下,这里要注意
//process.env.UNI_INPUT_DIR为项目所在的绝对路径,经测试,相对路径会找不到文件
const manifestPath = process.env.UNI_INPUT_DIR + '/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}": ${value}${hasComma ? ',' : ''}`)
      break;
    }
  }

  Manifest = ManifestArr.join('\n')
}

// 动态修改 h5 路由 base
if (process.UNI_SCRIPT_ENV?.NODE_ENV === 'text'){
	//测试的 base
    replaceManifest('h5.router.base', '"/textConfig/"')
}else if (process.UNI_SCRIPT_ENV?.NODE_ENV === 'product'){
	//生产的 base
    replaceManifest('h5.router.base', '"/productConfig/"')
}else {
	/其他的 base
    replaceManifest('h5.router.base', '""')
}

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

参考uniapp官方文档:uniapp.dcloud.net.cn/collocation...

相关推荐
铁皮饭盒41 分钟前
成为AI全栈 - 第4课:Drizzle ORM SQLite Elysia 数据库实战
前端·后端
ascarl201044 分钟前
Linux.do 帖子整理:AI 调用 Chrome DevTools 调试前端页面
linux·前端·人工智能
DanCheOo1 小时前
开源 | 我是怎么用 ai-memory 让 Cursor 每次开新对话都自动知道项目背景的
前端·人工智能·ai·ai编程
MPGWJPMTJT1 小时前
告别手动切换 Node 版本:从 nvm 迁移到 Volta
前端
Apifox2 小时前
Apifox 近期更新|AI Agent Debugger、A2A Debugger、Postman API 导入、Ask AI 侧边栏对话
前端·人工智能·后端
嗷o嗷o2 小时前
Android 前台服务为什么越来越难用了?很多问题不是限制多,而是你任务模型就不该用 FGS
前端
摇滚侠2 小时前
软件开发外包项目组,如何提高代码质量和开发效率
java·开发语言·前端·ide·intellij-idea
不考研当牛马2 小时前
HTML CSS 新手大全初学者必看 (含有部分 JavaScript)
javascript·css·html
卷帘依旧2 小时前
Promise链式调用原理
前端·javascript
光影少年2 小时前
react 单向数据流理解
前端·react.js·掘金·金石计划