首页 > 编程语言 >小程序自动发版探索,两个优秀的第三方库该如何选择?且听我娓娓道来【玩转前端】

小程序自动发版探索,两个优秀的第三方库该如何选择?且听我娓娓道来【玩转前端】

时间:2023-08-16 10:07:50浏览次数:62  
标签:mini ci 项目 配置 程序 玩转 env 发版 库该

前情提要

目前的多端项目,在代码发布的时候,对于不同的端,需要进行不同的操作。尤其小程序端,每次都要在开发者工具中进行一次:

上传->填写版本信息->提交审核(确定上线时)

既然手动这么麻烦,能不能做成自动的?让开发节省重复操作时间,同时避免手动操作遗漏的可能性。

我翻阅资料,发现已经有大佬实现了上面的功能,我只需要站在巨人的肩膀上,结合实际需要,做些细微的调整即可。

功能计划

目前想要的功能比较简单,主要是自动化发版:

1、Taro打包后的小程序(原生小程序暂时不必要)

2、自动化版本发布、生成体验二维码

3、使用 git 昵称代替手工写入备注

第三方插件尝试

我找了两个功能各方面写的好且全面的插件,分别是Taro官方提供的 @tarojs/plugin-mini-ci 和 川哥写的 mini-ci

@tarojs/plugin-mini-ci

Taro 提供的这个插件接入很简单,官方文档写的很详细。

引入

因为我们目前只有微信小程序,所以里面只有关于微信小程序的配置。

安装

npm i @tarojs/plugin-mini-ci -D

本插件 Taro 3.x 版本均可使用,无需和其他 taro 包版本号保持一致;点击查看最新版本。

使用插件

/config/index.js文件中加入如下配置:

// 示例, 如果你使用 `vs code` 作为开发工具, 你还可以使用注释的语法引入插件包含的声明文件,可获得类似于typescript的友好提示
/**
 * @typedef { import("@tarojs/plugin-mini-ci").CIOptions } CIOptions
 * @type {CIOptions}
 */
const CIPluginOpt = {
  weapp: {
    appid: '微信小程序appid',
    privateKeyPath: '密钥文件相对项目根目录的相对路径,例如 key/private.appid.key',
  },
  // 版本号
  version: '1.0.0',
  // 版本发布描述
  desc: '版本描述',
}
const config = {
  plugins: [['@tarojs/plugin-mini-ci', CIPluginOpt]],
}

除了给插件传入对象, 你也可以传入一个异步函数,在编译时动态返回相关配置。

const CIPluginFn = async () => {
  // 可以在这里做一些异步事情, 比如请求接口获取配置
  /**
   * @typedef { import("@tarojs/plugin-mini-ci").CIOptions } CIOptions
   * @type {CIOptions}
   */
  return {
    weapp: {
      appid: '微信小程序appid',
      privateKeyPath: '密钥文件相对项目根目录的相对路径,例如 key/private.appid.key',
    },
    swan: {
      token: '鉴权需要的token令牌',
    },
    // 版本号
    version: '1.0.0',
    // 版本发布描述
    desc: '版本描述',
  }
}

const config = {
  plugins: [['@tarojs/plugin-mini-ci', CIPluginFn]],
}

作为选项配合 build 命令使用

package.json 的 scripts 字段使用命令参数

{
  "scripts": {
    //  构建完后自动 “打开开发者工具”
    "build:weapp": "taro build --type weapp --open",
    //  构建完后自动 “上传代码作为开发版并生成预览二维码”
    "build:weapp:preview": "taro build --type weapp --preview",
    //  构建完后自动“上传代码作为体验版”
    "build:weapp:upload": "taro build --type weapp --upload",
    //  构建完后自动“上传 dist/xxx 目录的代码作为体验版”, `--projectPath` 参数 适用于 taro 和 原生混合的场景
    "build:weapp:upload": "taro build --type weapp --upload --projectPath dist/xxx"
  },
  "taroConfig": {
    "version": "1.0.0",
    "desc": "上传描述"
  }
}

插件小结

优点:接入简单,基础功能完善,支持多类小程序。

缺点:无法满足一些定制化的需求,比如指定机器人。

推荐指数:四颗星,适合除了上传预览,无需额外需求的场景

mini-ci

川哥写的这个组件也很好用,Git仓库里有使用的详细介绍,这里也按照Git仓库提供的使用流程,详细配置一下。

引入

首次使用前需先执行 mini-ci init 配置 mini.config.js 配置(更推荐)

执行 mini-ci init 会把 miniConfig 的配置拷贝生成到当前小程序项目(或者新项目)中。

在当前小程序项目(或者新项目)的目录下配置 mini.config.js,这个优先于 .env

首次使用前需先执行 mini-ci init 配置 mini.config.js 配置(更推荐)
执行 mini-ci init 会把 miniConfig 的配置拷贝生成到当前小程序项目(或者新项目)中。

在当前小程序项目(或者新项目)的目录下配置 mini.config.js,这个优先于 .env

参考当前项目中的 mini.config.js

按照微信小程序文档配置小程序密钥等,这样就能上传和预览了。如果没有微信小程序,可以自行免费开通个人的微信小程序。

或者配置 .env
在当前小程序项目(或者新项目)的目录下配置 .env

参考当前项目中的 .env

configPath 配置
如果需要单选或者多选时,需配置 configPath。

或者配置 .env

在当前小程序项目(或者新项目)的目录下配置 .env

首次使用前需先执行 mini-ci init 配置 mini.config.js 配置(更推荐)
执行 mini-ci init 会把 miniConfig 的配置拷贝生成到当前小程序项目(或者新项目)中。

在当前小程序项目(或者新项目)的目录下配置 mini.config.js,这个优先于 .env

参考当前项目中的 mini.config.js

按照微信小程序文档配置小程序密钥等,这样就能上传和预览了。如果没有微信小程序,可以自行免费开通个人的微信小程序。

或者配置 .env
在当前小程序项目(或者新项目)的目录下配置 .env

参考当前项目中的 .env

configPath 配置
如果需要单选或者多选时,需配置 configPath。

configPath 配置

首次使用前需先执行 mini-ci init 配置 mini.config.js 配置(更推荐)
执行 mini-ci init 会把 miniConfig 的配置拷贝生成到当前小程序项目(或者新项目)中。

在当前小程序项目(或者新项目)的目录下配置 mini.config.js,这个优先于 .env

参考当前项目中的 mini.config.js

按照微信小程序文档配置小程序密钥等,这样就能上传和预览了。如果没有微信小程序,可以自行免费开通个人的微信小程序。

或者配置 .env
在当前小程序项目(或者新项目)的目录下配置 .env

参考当前项目中的 .env

configPath 配置
如果需要单选或者多选时,需配置 configPath。

功能定制

获取 Git 昵称

因为自动发版使用的是微信提供的机器人,所以,提交版本无法区分是谁。这种情况下,可以在自定义备注中加入提交人的信息。

而手动录入,是有可能出现遗漏的情况。如果能直接获取 Git 登录名,可以直接把昵称默认值放到备注里。

GitHub API

我之前文章有一篇是写获取 git 的标签的,所以我写获取昵称的时候,也是往那个思路靠的。但是没有成功。

后来,还是 VS 插件 Git History 给我的灵感。使用 Git 提供的 API,获取当前登录者的信息。

import axios from 'axios';
function getContributors(remoteUrl) {
  const remoteRepoPath = remoteUrl.replace(/.*?github.com(\/|:)/, '');
  const repoPath = remoteRepoPath.replace(/\.git\/?$/, '');
  const promise = axios.get(`https://api.github.com/repos/${repoPath}/contributors`);

  return promise
    .then(response => {
      return response.data;
    })
    .catch(() => {
      // Errors can be as follow
      // 403 - max API limit has been exceeded by the client
      // 404 - not found due to wrong path or its a private repository
      return [];
    });
}
getContributors('https://github.com/wxmp-project/wxmp-travel');


tips:

通常我找不到实现方案的时候,我就会去找有没有第三方插件有类似的功能,然后找到源码去看人家是怎么实现的。

像上面的功能,我也是找了很久没有找到实现方案。在 gitHistoryVSCode 源码中找到了实现方式。


GitLab API

同样的,GitLab也应该是有提供API的,我搜了一下果然有,官网地址 >>

DevOps 发版小程序

我们使用的 DevOps 自动化运维平台,实现项目的部署。

自动化处理之前,不同端的部署,要在多个地方进行操作,H5的在DevOps 平台上进行发布操作,小程序在开发者工具里。

所以我修改了构建命令,加入了小程序发布的参数。

使用 jenkins 进行项目发布,可以在脚本中修改命令。因为我没有实际场景,所以没办法详细描述。需要的朋友可以检索一下。

总结

最终选择的 @tarojs/plugin-mini-ci,因为它已经满足我们的实际需求,且是同一个生态下的,接入成本低。

同时还做了功能定制,更加贴合实际业务需要。


作者:非职业「传道授业解惑」的开发者叶一一简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。如果看完文章有所收获,欢迎点赞

标签:mini,ci,项目,配置,程序,玩转,env,发版,库该
From: https://blog.51cto.com/u_15838863/7098742

相关文章

  • 图文结合丨带你轻松玩转MySQL Shell for GreatSQL
    一、引言1.1什么是MySQLShell?MySQLShell是MySQL的一个高级客户端和代码编辑器,是第二代MySQL客户端。第一代MySQL客户端即我们常用的MySQL。除了提供类似于MySQL的SQL功能外,MySQLShell还提供JavaScript和Python脚本功能,并包括与MySQL一起使用的API。......
  • 【名师代练】带你玩转 RocketMQ,角逐「RocketMQ 首席评测官」
    RocketMQ背景ApacheRocketMQ诞生至今,一直服务于100%阿里集团内部业务、阿里云以及开源社区数以万计的企业客户。历经十多年双十一严苛流量验证的RocketMQ,承载了超过万亿级消息规模的洪峰压力。2021年ApacheRocketMQ更是进入全新5.0时代。立足于企业业务集成的核心场景,R......
  • 让 GPT-4 来修复 Golang “数据竞争”问题(续) - 每天5分钟玩转 GPT 编程系列(7)
    目录1.我以为2.阴魂不散的“数据竞争”问题3.老规矩,关门放GPT-43.1复现问题3.2让GPT-4写一个单元测试3.3修复Wait()中的逻辑漏洞4.总结1.我以为我以为GoPool这个项目会昙花一现,从此在GitHub上封尘。关于GoPool项目诞生的故事:《仅三天,我用GPT-4生成了性能......
  • 让 GPT-4 来修复 Golang “数据竞争”问题 - 每天5分钟玩转 GPT 编程系列(6)
    目录1.Golang中的“数据竞争”2.GoPool中的数据竞争问题3.让GPT-4来修复数据竞争问题3.1和GPT-4的第一轮沟通3.2和GPT-4的第二轮沟通3.3提交代码4.总结1.Golang中的“数据竞争”我在上个月发过一篇《跟着GPT-4从0到1学习Golang并发机制(三)》,文中有一节专......
  • 一文玩转MQTT (ESP8266 DHT11 MQTT MYSQL方案)
    本文我们来聊一聊esp8266利用mqtt协议进行通信。并将数据数据存入数据库的操作。关于MQTTMQTT(消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,MQTT最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。搭建MQTT服务器......
  • 玩转Linux必不可少的命令之tar
    ❝在linux操作中,我们经常对文件进行操作,比如移动、复制等。单个文件的时候很好操作,但是一但文件比较多的情况下,我们最好的办法就是压缩打包,而tar命令可以帮助我们实现打包、解压的操作!❞什么是Tar它是Unix和类Unix系统上的压缩打包工具,可以将多个文件合并为一个文件,打包后的文件后......
  • Aidlux玩转例子—换脸。
    玩一玩AidLux应用中心的Demo。  1.在AidLux平台例子中心,选择一个样例。2.点击RunNow进行运行。3.通过摄像头捕捉人脸,与明星互换面容,可以看看你是哪个明星。 展现流程如下:https://www.bilibili.com/video/BV1gp4y1g782/?vd_source=706eedffe7949070fa3c396c34f4e789......
  • 让 GPT-4 给开源项目 GoPool Review 社区贡献者的 PR - 每天5分钟玩转 GPT 编程系列(5
    目录1.嘚瑟一下2.言归正传2.1GoPool的第一个PR2.2祭出GPT-42.3问问GPT-4怎么看这个PR2.4让GPT-4重构代码3.打完收工1.嘚瑟一下你还记得那个宣称自己性能全网第一的GolangWorkerPool不?对,就是能够GoPool,据说作者拿着GPT-4只花了3天就把这个项目肝出来了。......
  • 从零玩转系列之微信支付实战PC端项目构建+页面基础搭建 | 技术创作特训营第一期
    一、前言欢迎来到本期的博客!在这篇文章中,我们将带您深入了解前端开发领域中的一个热门话题:如何使用Vue3和Vite构建前端项目。随着现代Web应用程序的需求不断演进,选择适当的工具和技术变得至关重要。Vue3作为一种流行的前端框架,以其出色的性能和灵活的特性赢得了众多开......
  • 从零玩转系列之微信支付实战PC端支付微信退款接口搭建 | 技术创作特训营第一期
    一、前言从零玩转系列之微信支付实战PC端支付微信退款接口搭建|技术创作特训营第一期继前文章取消订单接口和查询订单接口此篇为申请退款流程,此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程序和PC端)在此之前已经更新了微信支付开篇、微信支付安全、微信实战基础......