简介
miniprogram-deploy 以配置文件+命令的方式, 基于miniprogram-ci完成微信小程序的自动化上传。
前言
我们可能正在开发H5, 启动着很多进程.
我们可能正在摸鱼, chrome开了无数个标签页.
我们可能正在...
- 产品A:兄弟帮忙改个小程序页面的文案
- 我:修改文案, 打开小程序开发者工具, 打包上传, 一气呵成!
- 产品A:6啊兄弟!这么快!
- 我:嘴角微笑,若无其事地关掉小程序开发者工具
…
- 产品B:兄弟帮忙改个小程序文案
- 我:????我刚关掉开发者工具,开一次电脑卡的不行
- 产品B:那你为什么要关?
- 我:开着占内存啊!别哔哔了,文案拿来,我再改!
是不是非常苦恼? 就简单修改个文案, 我们竟然还要打开那个庞大的开发者工具上传代码!
miniprogram-ci
这时候我发现微信其实已经提供了ci工具miniprogram-ci, 看一下它的官方介绍:
miniprogram-ci 是从[微信开发者工具]中抽离的关于小程序/小游戏项目代码的编译模块。
使用前需要使用小程序管理员身份访问"[微信公众平台]-开发-开发设置"后下载代码上传密钥,并配置 IP 白名单,才能进行上传、预览操作。
miniprogram-ci 从 1.0.28 开始支持第三方平台开发的上传和预览,调用方式与普通开发模式无异。
太好了!这不就解决我的问题了吗, 看看怎么用先:
miniprogram-ci \
upload \
--pp ./demo-proj/ \
--pkp ./private.YOUR_APPID.key \
--appid YOUR_APPID \
--uv PACKAGE_VERSION \
-r 1 \
--enable-es6 true \
握草这命令参数也太多了!! 用起来好像非常麻烦的样子?? 如何简化的使用它?
- 每次都手动执行这条命令上传
很明显不现实, 难道要记到自己的小本本上, 每次都复制过来执行吗? - 把这个命令放到npm script里 比如新增一个upload, 每次npm run upload就行。但是这样同样存在一个问题, 每次发布前需要修改命令里的PACKAGE_VERSION, 频繁修改package.json文件很明显是不合适的, 一不小心就容易搞出个p0事故.
一个更简单易用的发布工具 miniprogram-deploy
- 只想每次简单执行个命令就行
- 不想频繁改业务代码的文件
基于以上诉求, 我们可以写一个基于miniprogram-ci的发布工具, 让其拥有自己的配置文件, 所有的发布改动只局限在这个配置文件里即可。
miniprogram-deploy 就诞生了!
仅需运行 miniprogram-deploy upload 即可完成小程序的上传!
下面来看看这个工具都提供了哪些命令:
miniprogram-deploy init
配置文件总不能让用户手动去写出来吧, 最好还是提供一个初始化的命令, 来完成配置文件的初始化。
鉴于init命令只需要执行一次, 所以我们采用 inquirer 来做一个图形化的命令行交互
引导用户简单填几个字段后, 我们就可以生成自己的配置文件了!
miniprogram-deploy doctor
对于咱们的发布工具来说, 这个配置文件只要存在就可以吗?
当然不是!我们需要在运行时校验文件内的字段是否符合期望!
鉴于我们是使用typescript开发的miniprogram-deploy, 所以更期望能够基于ts的类型定义来校验。
目前采用的方案是, 先把ts类型定义转换为jsonschema, 再利用jsonschema校验json数据。
typescript-json-schema
有这样一个库 typescript-json-schema , 可以非常简单的基于某个ts文件生成jsonschema.
来简单看一下这个ts的类型定义
转换成jsonschema是这个样子
剩下的就是自动构建jsonschema, 我们就可以在每次打包前去生成一次jsonschema, 最后和打包好的文件一起上传到npm即可。
jsonschema
有这样一个库 jsonschema, 可以非常简单的基于某个jsonschema在运行时校验json数据.
运行校验
咱们来看一下校验通过和校验不通过会有什么差别吧~
校验通过
✔ mp-deploy.config.json check passed
校验失败
{
"type": "miniProgram",
"version": "2.1.1",
"desc": "测试",
"projectPath": "."
}
✖ mp-deploy.config.json check failed
instance requires property "privateKeyPath"
或者
{
"type": "miniProgram",
"privateKeyPath": 0,
"version": "2.1.1",
"desc": "测试",
"projectPath": "."
}
✖ mp-deploy.config.json check failed
instance.privateKeyPath is not of a type(s) string
miniprogram-deploy upload
miniprogram-ci在上传的时候需要更多的字段, 而我们只需要最少3个字段的配置文件即可.
那么其他的字段是怎么获取的呢?
其实是用户代码目录的project.config.json中获取, 避免了用户的重复输入和重复配置。
上传的信息如何输出到命令行呢?
上传的过程中, 我们期望用户可以直观的感受到上传的进程, 也期望能输出给用户漂亮的命令行信息, 所以基于ora和chalk封装了ConsoleOutput来做统一的输出处理。
看一下最终的输出结果
写在最后
miniprogram-deploy 以配置文件+命令的方式, 基于miniprogram-ci完成微信小程序的自动化上传,一条命令即可完成小程序文件的上传,可以非常方便的加入到jenkins等CI CD流程中。
未经允许请勿转载, 转载请注明原作者和原链接