动态获取 微信小程序appid / 自定义启动命令

官网:https://uniapp.dcloud.net.cn/collocation/package.html#%E7%94%A8%E6%B3%95
小程序开发完成之后需要一套代码多个小程序使用,每次都需要在manifest.json文件中手动修改,大大增加了开发的复杂度。

官网:https://uniapp.dcloud.net.cn/collocation/package.html#%E7%94%A8%E6%B3%95
小程序开发完成之后需要一套代码多个小程序使用,每次都需要在manifest.json文件中手动修改,大大增加了开发的复杂度,动态获取appid,便于维护小程序数据。

一、修改 package.json 扩展配置

 "uni-app": {"scripts": {"fbl": {"title": "赋百龄","env": {"UNI_PLATFORM": "mp-weixin","ENV_TYPE": "fbl"},"define": {"MP-WEIXIN": true}},"wlsc": {"title": "无量商城","env": {"UNI_PLATFORM": "mp-weixin","ENV_TYPE": "wlsc"},"define": {"MP-WEIXIN": true}}}},

补充:

{/*** package.json其它原有配置 * 拷贝代码后请去掉注释!*/"uni-app": {// 扩展配置"scripts": {"custom-platform": { //自定义编译平台配置,可通过cli方式调用"title":"自定义扩展名称", // 在HBuilderX中会显示在 运行/发行 菜单中"browser":"",  //运行到的目标浏览器,仅当UNI_PLATFORM为h5时有效"env": {//环境变量"UNI_PLATFORM": "",  //基准平台"MY_TEST": "", // ... 其他自定义环境变量},"define": { //自定义条件编译"CUSTOM-CONST": true //自定义条件编译常量,建议为大写}}}    }
}

Tips: ●
UNI_PLATFORM仅支持填写uni-app默认支持的基准平台,目前仅限如下枚举值:h5、mp-weixin、mp-alipay、mp-baidu、mp-toutiao、mp-qq
● browser
仅在UNI_PLATFORM为h5时有效,目前仅限如下枚举值:chrome、firefox、ie、edge、safari、hbuilderx
● package.json文件中不允许出现注释,否则扩展配置无效 ● vue-cli 需更新到最新版,HBuilderX需升级到
2.1.6+ 版本

二、根目录创建config/env.ts 文件

type EnvConfigType = {appid: stringappName: stringappLogoUrl: string
}
// 翻倍了
const fbl: EnvConfigType = {appid: 'wx123cbb5e',appName: '翻倍了',
}// 为了生存
const wlsc: EnvConfigType = {appid: 'wxd4573',appName: '为了生存',
}// 注意:这里的属性名要和上面package.json中定义的扩展节点编译名称相同
const ENV_CONFIG = {fbl,wlsc,
}module.exports = ENV_CONFIG

三、 vite.config.ts 配置文件,修改appid

import { defineConfig } from 'vite'
import VueTypeImports from 'vite-plugin-vue-type-imports'
import uni from '@dcloudio/vite-plugin-uni'// 导入fs模块
const fs = require('fs')
// 导入环境变量配置文件
const ENV_CONFIG = require('./config/env.ts')
const manifestPath = `${__dirname}/src/manifest.json` // 注意一下自己配置的 manifestPath 是否正确
let Manifest = fs.readFileSync(manifestPath, {encoding: 'utf-8',
})
function replaceManifest(path: string, value: string) {const arr = path.split('.')const len = arr.lengthconst lastItem = arr[len - 1]let i = 0const ManifestArr = Manifest.split(/\n/)for (let index = 0; index < ManifestArr.length; index++) {const item = ManifestArr[index]if (new RegExp(`"${arr[i]}"`).test(item)) ++iif (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')
}
// 获取执行命令
const ENV_TYPE = JSON.parse(process.env.UNI_CUSTOM_DEFINE)['ENV_TYPE'] // 打印出来是否正确
// 读取环境变量内容
const appid = ENV_CONFIG[ENV_TYPE].appid
if (appid) {replaceManifest('mp-weixin.appid', `"${appid}"`)
}
fs.writeFileSync(manifestPath, Manifest, { flag: 'w' })// https://vitejs.dev/config/
export default defineConfig({build: {// 开发阶段启用源码映射:https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html#需主动开启-sourcemapsourcemap: process.env.NODE_ENV === 'development',},plugins: [uni(), VueTypeImports()],
})

四、运行及发布项目

1、启动命令

vue-cli开发者可通过如下命令,启动钉钉小程序平台的编译

运行项目

npm run dev:custom fbl 
npm run dev:custom wlsc  

发布项目

npm run build:custom fbl
npm run build:custom wlsc 

HBuilderX会根据package.json的扩展配置,在运行、发行菜单下,生成自定义菜单(钉钉小程序),开发者点击对应菜单编译运行即可,如下图:
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1c0b107ef25d46d8b6c0066d2eaa132c.png
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ad799726bfab4f1ab3e456940899fe87.png在这里插入图片描述

2、修改启动命令

在这里插入图片描述

添加指令

    "dev:mp-fbl": "uni -p fbl","dev:mp-wlsc": "uni -p wlsc","build:mp-fbl": "uni -p fbl","build:mp-wlsc": "uni -p wlsc",

启动打包命令:

# 启动
npm run dev:mp-fbl
npm run dev:mp-wlsc
# 打包
npm run build:mp-fbl
npm run build:mp-wlsc

五、获取自定义环境配置的信息

可以在 vite.config.ts 文件中,添加 define 共享选项 。

1、vite 的 define 共享选项

在这里插入图片描述

2、配置共享选项

我们可以将处理好的当前微信小程序环境配置信息,放到共享选项中的常量中,修改vite.config.ts文件。

import { defineConfig } from 'vite'
import VueTypeImports from 'vite-plugin-vue-type-imports'
import uni from '@dcloudio/vite-plugin-uni'// 导入fs模块
const fs = require('fs')
// 导入环境变量配置文件
const ENV_CONFIG = require('./config/env.ts')
const manifestPath = `${__dirname}/src/manifest.json`
let Manifest = fs.readFileSync(manifestPath, {encoding: 'utf-8',
})
function replaceManifest(path: string, value: string) {const arr = path.split('.')const len = arr.lengthconst lastItem = arr[len - 1]let i = 0const ManifestArr = Manifest.split(/\n/)for (let index = 0; index < ManifestArr.length; index++) {const item = ManifestArr[index]if (new RegExp(`"${arr[i]}"`).test(item)) ++iif (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')
}
// 获取执行命令
const ENV_TYPE = JSON.parse(process.env.UNI_CUSTOM_DEFINE)['ENV_TYPE']
// 读取环境变量内容
const appid = ENV_CONFIG[ENV_TYPE].appid
if (appid) {replaceManifest('mp-weixin.appid', `"${appid}"`)
}
fs.writeFileSync(manifestPath, Manifest, { flag: 'w' })
console.log(ENV_CONFIG[ENV_TYPE])
// https://vitejs.dev/config/
export default defineConfig({build: {// 开发阶段启用源码映射:https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html#需主动开启-sourcemapsourcemap: process.env.NODE_ENV === 'development',},plugins: [uni(), VueTypeImports()],// 定义全局常量替换方式。其中每项在开发环境下会被定义在全局,而在构建时被静态替换。define: {_PROCESS_ENV_APP_INFO: ENV_CONFIG[ENV_TYPE],},
})

3、页面获取自定义环境配置信息

打开App.vue文件,在 onShow 里面去执行仓储的赋值。

1)仓储创建
import { defineStore } from 'pinia'export const useAppInfoStore = defineStore('appInfo', () => {const appInfo = ref<{ appid: string, appName: string, appLogoUrl: string }>(uni.getStorageSync('_appInfo'))// 获取缓存小程序自定义环境配置信息const setAppInfo = (appData: { appid: string; appName: string; appLogoUrl: string }) => {appInfo.value = appDatauni.setStorage({key: '_appInfo',data: appData,})}return { setAppInfo, appInfo }
})
2)在App.vue文件中执行赋值操作
<script setup lang="ts">import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'import { useThemesStore, useAppInfoStore } from '@/stores'const themesStore = useThemesStore()const appInfoStore = useAppInfoStore()onLaunch(() => {console.log('App Launch')})onShow(() => {console.log('App Show', getCurrentPages())themesStore.actionThemeCfg() // 执行仓储赋值appInfoStore.setAppInfo(_PROCESS_ENV_APP_INFO) // 设置app信息})onHide(() => {console.log('App Hide')})// #ifndef MP-WEIXIN// 隐藏原生的底部tabbaruni.hideTabBar()// #endif
</script><style lang="scss">
</style>

取值:

import { useAppInfoStore } from '@/stores'
const { appInfo } = useAppInfoStore()<imagev-if="appInfo.appLogoUrl"class="app-logo"mode="heightFix":src="appInfo.appLogoUrl"/><text v-else>{{ appInfo.appName }}</text>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网搭建阿里-龙蜥镜像站

1.问题&#xff1a;官网BUG 本地做 yum 仓库&#xff0c;下载的文件&#xff0c;只有 23 版本的&#xff0c;其他的版本没有文件(版本23&#xff0c;占用2.1T后&#xff0c;一直不下载其它版本&#xff1b;) 2.解决方案&#xff1a; 2.1. rsync剔除不要的版本 [rootlocalh…

三维GIS开发的就业前景

一、前言 三维GIS是一个伪概念,GIS是地理信息系统&#xff0c;三维GIS就是三维地理信息系统&#xff0c;在课本上&#xff0c;专业概念上&#xff0c;也没有这一说法吧&#xff0c;所以三维GIS&#xff0c;就是技术人员造概念拼凑造出来的&#xff0c;本质上就是GIS三维可视化…

SSH连接密码问题:原因、表现与解决方案

SSH连接密码问题&#xff1a;原因、表现与解决方案 写在最前面1. 密码错误2. SSH服务配置问题3. 账户锁定或禁用4. 密钥认证问题5. SSH版本不兼容6. 服务器负载或连接数过多7. IP地址被限制 小结 写在最前面 SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0…

抖音博主老阳推荐的人力RPO蓝海项目如何?【转载】一位实操者的经验之谈

在刷短视频的时候&#xff0c;被抖音博主老阳讲的职场干货吸引了&#xff0c;讲的也比较有感染力&#xff0c;深入了解之后知道了他们有帮推荐副业项目&#xff0c;由于我有干人力资源的经验&#xff0c;对老阳推荐的人力RPO项目感兴趣。 初识人力RPO 但是看网上有人说被骗什么…

Linux搭建JavaEE环境

Linux搭建JavaEE环境 需要在 Linux 下进行 JavaEE 的开发&#xff0c;我们需要安装如下软件 JDKtomcatmysqlidea 安装JDK 安装步骤 首先去官网下载jdk的linux版本 下载地址&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/ 1) mkdir /opt/jdk 2) 通过 …

如何使用 NFTScan NFT API 在 Mantle 网络上开发 Web3 应用

Mantle Network 是建立在以太坊区块链之上的第 2 层扩展解决方案&#xff0c;采用了 Optimistic Rollups 技术&#xff0c;由 BitDAO 孵化&#xff0c;以提供比以太坊更快速和更经济的交易体验。由于 Mantle 基础链构建在 OP Stack 之上并与 EVM 兼容&#xff0c;因此以太坊网络…

2023年全球前端大技术大会(GMTC北京站2023):核心内容与学习收获(附大会核心PPT下载)

此次峰会是一次内容丰富、有深度和广度的技术盛会。参会者不仅可以了解前端技术的最新发展和未来趋势&#xff0c;还可以与业界专家交流心得&#xff0c;提升自己的技能和能力。同时&#xff0c;此次大会也促进了全球前端社区的交流和合作&#xff0c;推动了前端技术的创新和发…

fastApi笔记04-查询参数和字符串校验

额外校验 使用Query可以对查询参数添加校验 from typing import Unionfrom fastapi import FastAPI, Queryapp FastAPI()app.get("/items/") async def read_items(q: Union[str, None] Query(defaultNone, max_length50)):results {"items": [{"…

Vue3学习——标签的ref属性

在HTML标签上&#xff0c;可以使用相同的ref名称&#xff0c;得到DOM元素ref放在组件上时&#xff0c;拿到的是组件实例&#xff08;组件defineExpose暴露谁&#xff0c;ref才可以看到谁&#xff09; <script setup lang"ts"> import RefPractice from /compo…

天锐绿盾 | 文件数据\资料防泄漏软件 \ 自动智能透明加密保护

怎么防止公司办公终端文件数据资料外泄? 防止公司办公终端文件数据资料外泄是非常重要的&#xff0c;以下是一些有效的措施&#xff1a; 限制访问权限&#xff1a;根据员工的职责和需求&#xff0c;设定文件和数据资料的访问权限。确保只有授权人员才能访问敏感信息。 加密存…

人声伴奏分离怎么搞?分享4个实用的工具!

在音乐制作和后期处理中&#xff0c;人声与伴奏的分离常常是一个复杂而精细的过程。随着科技的发展&#xff0c;现在市面上已经涌现出了一批高效且易于使用的人声伴奏分离工具&#xff0c;它们如同音乐制作人的得力助手&#xff0c;帮助我们将人声与伴奏完美分离&#xff0c;提…

使用Docker部署Docker-Compose-Ui工具并实现公网访问

文章目录 1. 安装Docker2. 检查本地docker环境3. 安装cpolar内网穿透4. 使用固定二级子域名地址远程访问 Docker Compose UI是Docker Compose的web界面。这个项目的目标是在Docker Compose之上提供一个最小的HTTP API&#xff0c;同时保持与Docker Compose CLI的完全互操作性。…

2024,深层互联第二代IndoorLink领夹式一对多讲解器面世!

新年之初&#xff0c;每一步都举足轻重。2024开年之际&#xff0c;资深讲解器厂家深层互联重磅推出第二代IndoorLink领夹式一对多讲解器&#xff0c;各项性能指标全线升级&#xff0c;成为新的行业标杆&#xff0c;一经面世即引起巨大反响。 2023年2月&#xff0c;首代IndoorL…

GitHub | 在 GitHub 上在线展示 Vue 项目

简洁版&#xff1a;上传所有代码 << 构建项目并上传 dist 目录 << 设置仓库 << 访问 Step1&#xff1a;在 GitHub 上新建仓库&#xff0c;并将 Vue 项目的代码 push 到该仓库中。坑点在于&#xff0c;如果你是从 GitHub 上 clone 的别人的项目&#xff0c;那…

安装unget包 sqlsugar时报错,完整的报错解决

前置 .net6的开发环境 问题 ? 打开unget官网&#xff0c;搜索报错的依赖Oracle.ManagedDataAccess.Core unget官网 通过unget搜索Oracle.ManagedDataAccess.Core查看该依赖的依赖 发现应该是需要的依赖Oracle.ManagedDataAccess.Core(>3.21.100)不支持.net6的环境 解…

k-means聚类、GMM高斯聚类、canopy聚类、DBSCAN聚类、FCM聚类、ISODATA聚类、k-medoid聚类、层次聚类、谱聚类 对比

k-means聚类、GMM高斯聚类、canopy聚类、DBSCAN聚类、FCM聚类、ISODATA聚类、k-medoid聚类、层次聚类、谱聚类 对比 标 代码获取代码获取代码获取代码获取代码获取代码获取代码获取代码获取代码获取代码获取题 GMM&#xff08;高斯混合模型&#xff09;是一种聚类算法&#xff…

Http改为Https后该如何测试

需要了解Http和Http之间的关系&#xff0c;他们之间都有哪些优点&#xff0c;哪些缺点&#xff0c;如果使用的产品进行了更改&#xff0c;该如何进行测试等等&#xff0c;Https提供了一个安全层&#xff08;SSL/TLS&#xff09;&#xff0c;这个安全层在客户端和服务器之间提供…

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO

目录 一、GPIO 概述二、GPIO模块相关API三、实例四、GPIO HDF驱动开发4.1、LED驱动程序(待续...)4.2、LED驱动配置(待续...) 坚持就有收获 轻量系统设备通常需要进行外设控制&#xff0c;例如温湿度数据的采集、灯开关的控制&#xff0c;因此在完成内核开发后&#xff0c;需要进…

SpringBootWeb学习笔记——12万字详细总结!

0. 写在前面 注:这套笔记是根据黑马程序员B站2023-3-21的视频学习的成果,其中省略了前端基础部分、Maven部分和数据库基础部分,详情可见目录。 注注:目前文章内结尾处多幅图片加载不出来,因为图片还存在本地没被传上来,过段时间再改~ 所有的Spring项目都基于Spring Fra…

升级到PHP8.X的原因和方法

上周有一个使用Hostease美国主机服务器多年的客户&#xff0c;反馈需要升级到PHP8.x&#xff0c;原因是站点程序已升级&#xff0c;并希望站点运行在更高也稳定的PHP8.x上。在升级PHP8.x的过程中&#xff0c;联系我们并反馈在升级过程中遇到了问题&#xff0c;需求解决方案。 升…