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

举报
叶一一 发表于 2023/07/30 15:42:06 2023/07/30
【摘要】 前情提要目前的多端项目,在代码发布的时候,对于不同的端,需要进行不同的操作。尤其小程序端,每次都要在开发者工具中进行一次:上传->填写版本信息->提交审核(确定上线时)既然手动这么麻烦,能不能做成自动的?让开发节省重复操作时间,同时避免手动操作遗漏的可能性。我翻阅资料,发现已经有大佬实现了上面的功能,我只需要站在巨人的肩膀上,结合实际需要,做些细微的调整即可。功能计划目前想要的功能比较简单,...

前情提要

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

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

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

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

功能计划

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

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畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。