- 前言
大家好,我是若川。我倾力持续组织了一年每周大家一起学习200行左右的源码共读活动,感兴趣的可以点此扫码加我微信 ruochuan02
参与。另外,想学源码,极力推荐关注我写的专栏《学习源码整体架构系列》,目前是掘金关注人数(4.3k+人)第一的专栏,写有20余篇源码文章。
- 前情回顾
注意:文章是基于 tag v0.7.0
撰写。目前工具是 0.12.0
版本,后续 mini-ci
会持续更新,文章应该暂时不会更新。
本文提到的工具 mini-ci 已开源,求个 star^_^
1 | bash复制代码# 可全局安装 |
估计有很多开发小程序的同学,还在使用微信开发者工具上传小程序。如果你是,那么这篇文章非常适合你。如果不是,同样也很适合你。
早在 2021 年 08 月,我写过一篇文章 Vue 3.2 发布了,那尤雨溪是怎么发布 Vue.js 的?
Vue 2.7
如何发布跟Vue 3.2
这篇文章类似,所以就不赘述了。
vuejs
发布的文件很多代码我们可以直接复制粘贴修改,优化我们自己发布的流程。比如写小程序,相对可能发布频繁,完全可以使用这套代码,配合miniprogram-ci,再加上一些自定义,加以优化。
于是今天我们来开发这样的脚手架工具。
看完本文,你将学到:
1 | bash复制代码1. 如何利用 release-it 提升版本号,自动打 tag,生成 changelog 等 |
先看看最终开发的效果。
支持的功能
显示帮助信息
上传效果
- 关于为啥要开发这样的工具
关于小程序
ci
上传,再分享两篇文章。
小打卡小程序自动化构建及发布的工程化实践 虽然文章里不是最新的
miniprogram-ci
,但这篇场景写得比较全面。
接着,我们先来看看 miniprogram-ci 官方文档。
- miniprogram-ci 官方文档
4.1 上传
1 | js复制代码const ci = require('miniprogram-ci'); |
4.2 预览
1 | js复制代码const ci = require('miniprogram-ci'); |
- Taro 小程序插件 @tarojs/plugin-mini-ci
如果使用 Taro
开发的小程序,可以直接使用。
具体如何使用参考文档,我在本文中就不赘述了。
小程序持续集成 @tarojs/plugin-mini-ci
我组织的源码共读第 30 期读的就是这个插件,非常值得学习。@tarojs/plugin-mini-ci 源码解读可以参考 @NewName 的源码文章
我体验下来的感觉有以下几点可以优化。
- 不支持指定机器人
- 不支持不打包时上传
- 不支持官方提供的更多配置
- 不支持选择多个小程序批量上传等等
如果有时间我可能给 Taro
提 PR
,当然不一定会被合并。
- uni-app 好像没有提供类似的插件
uni-app 好像没有提供类似的插件。需要自己动手,丰衣足食。
- release-it 自动提升版本、打 tag、生成 changelog 等
于是我们自己动手,丰衣足食,写一个工具解决上面提到的问题,支持 Taro
打包后的小程序和 uni-app
打包后的,还有原生小程序上传和预览。
开发小工具之前,先介绍一些好用的工具。
据说很多小伙伴的项目,没有打 tag
、没有版本的概念,没有生成 changelog
,没有配置 eslint
、prettier
,没有 commit
等规范。
这些其实不难,commit
规范一般简单做法是安装 npm i git-cz -D
,
在package.json
中加入如下脚本。
1 | json复制代码{ |
git
提交时使用 npm run commit
即可,其他就不赘述了。
release-it,自动提升版本号,自动打 tag
,生成 changelog
等
1 | bash复制代码npm init release-it |
1 | json复制代码{ |
这样配置后,可以 npm run release
执行 release-it
版本。
还支持 hooks 钩子,比如提升版本号后"after:bump": "echo 更新版本成功"
,更多功能可以查看release-it 官网仓库。
7.1 npm init release-it 原理
为啥 npm init
也可以直接初始化一个项目,带着疑问,我们翻看 npm 文档。
npm init
用法:
1 | bash复制代码npm init [--force|-f|--yes|-y|--scope] |
npm init <initializer>
时转换成 npx
命令:
1 | bash复制代码npm init foo -> npx create-foo |
看完文档,我们也就理解了:
运行 npm init release-it
=> 相当于 npx create-release-it
npm init release-it
原理其实就是 npx create-release-it
选择一些配置,生成 .release-it.json
或者 package.json
的 release-it
配置。
再写入命令release
配置到 package.json
。
1 | json复制代码{ |
最后执行 npm install release-it --save-dev
也就是源码里的 await execa('npm', ['install', 'release-it', '--save-dev'], { stdio: 'inherit' });
。
- 小程序上传工具实现主流程
需要支持多选,那肯定得遍历数组。
1 | js复制代码// 代码只是关键代码,完整的可以查看 https://github.com/lxchuan12/mini-ci/blob/0.7.0/src/index.js |
main
函数
1 | js复制代码const { green, bold } = require('kolorist'); |
8.1 添加功能支持指定参数
使用 minimist 解析命令行参数。
1 | js复制代码const getParams = () => { |
8.2 支持读取项目的 package.json
的 version
,也支持读取自定义version
kolorist 颜色输出。
1 | js复制代码const { red, bold } = require('kolorist'); |
8.3 版本描述 支持指定 git commit hash 和作者
git rev-parse --short HEAD
读取 git
仓库最近一次的 commit hash
。
parse-git-config
可以读取 .git/config
配置。
1 | js复制代码// const path = require('path'); |
8.4 读取配置 wx.config.js 配置(更推荐)
当前也支持读取 .env
配置。读取 .env
配置,可以采用 dotenv
。关于 dotenv 的原理,可以看我之前写过的文章面试官:项目中常用的 .env 文件原理是什么?如何实现?
但 wx.config.js
可以配置更多东西而且更灵活。所以更推荐。
感兴趣的可以研究 vue-cli
是如何读取 vue.config.js
配置的。围绕工作相关的学习,往往收益更大。
1 | js复制代码// 读取 wx.config.js 配置 |
8.5 支持选择多个小程序
我们可以用 enquirer 来实现单选或者多选的功能。以下只是关键代码。
完整代码可以查看 mini-ci/src/utils/getConfig.js 文件。
1 | js复制代码// 只是关键代码 |
8.6 支持多个批量上传
1 | js复制代码// 只是关键代码 |
后续可能接入 CI/CD、接入邮件提醒、接入钉钉、支持可视化操作等等
8.7 更多如何使用可以参考文档
1 | bash复制代码# 全局安装 mini-ci 工具,也可以不全局安装 |
可以克隆我的另外一个小程序(腾讯开源的电商小程序)。比如 projects
中。
按照微信小程序文档配置小程序密钥等,这样就能上传和预览了。如果没有微信小程序,可以自行免费开通个人的微信小程序。
- 总结
通过本文的学习,我们知道了以下知识。
1 | bash复制代码1. 如何利用 release-it 提升版本号,自动打 tag,生成 changelog 等 |
我相信大家也能够自己动手实现公司类似要求的脚手架工具,减少发版时间,降本提效。
本文提到的工具 mini-ci 已开源,求个 star^_^
1 | bash复制代码# 可全局安装 |
注意:文章是基于 tag v0.7.0
撰写。目前工具是 0.12.0
版本,后续 mini-ci
会持续更新,文章应该暂时不会更新。
最后可以持续关注我@若川。我倾力持续组织了一年每周大家一起学习200行左右的源码共读活动,感兴趣的可以点此扫码加我微信 ruochuan02
参与。
另外,想学源码,极力推荐关注我写的专栏《学习源码整体架构系列》,目前是掘金关注人数(4.2k+人)第一的专栏,写有20余篇源码文章。包含jQuery
、underscore
、lodash
、vuex
、sentry
、axios
、redux
、koa
、vue-devtools
、vuex4
、koa-compose
、vue 3.2 发布
、vue-this
、create-vue
、玩具vite
、create-vite
等20余篇源码文章。
我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿。
本文转载自: 掘金