云函数实现小程序代码包分包数及插件等基础信息非侵入式检测
【摘要】 一个云函数帮你获取小程序包基础信息 背景有时会有同学问如下问题:某个小程序有多少分包?用了啥插件?这个包是主包还是分包?…为了方便确认类似问题,做个在线的检测工具吧。 实现思路包文件结构是已知的,见之前发的一篇文章。所以我们只要直接读取分析就好了。需要基于 koa 创建一个云函数,在函数中接收小程序代码包进行分析就可以了。信息基本都是从配置文件提取,所以我们只要从二进制文件中提取全局配置就行...
一个云函数帮你获取小程序包基础信息
背景
有时会有同学问如下问题:
- 某个小程序有多少分包?
- 用了啥插件?
- 这个包是主包还是分包?
- …
为了方便确认类似问题,做个在线的检测工具吧。
实现思路
包文件结构是已知的,见之前发的一篇文章。所以我们只要直接读取分析就好了。需要基于 koa 创建一个云函数,在函数中接收小程序代码包进行分析就可以了。
信息基本都是从配置文件提取,所以我们只要从二进制文件中提取全局配置就行。因为并没有产生任何副作用,不对包本身做任何修改,所以是非侵入式的检测,基本秒出结果无需等待,下面说一下实现功能所需的关键函数。
关键函数
- 接收表单提交的包文件并以流式读取:
// 获取上传文件
let file = ctx.request.files.file;
let reader = fs.createReadStream(file.path);
- 读取信息转
Buffer
:
// 二进制流转 Buffer 函数
function streamToBuffer(stream) {
return new Promise((resolve, reject) => {
let buffers = [];
stream.on('error', reject);
stream.on('data', (data) => buffers.push(data));
stream.on('end', () => resolve(Buffer.concat(buffers)));
});
}
let buf = await streamToBuffer(reader);
- 根据全局配置进行关键信息读取:
let app = JSON.parse(content);
let pageNum = app.pages.length;
let subPackageNum = app.subPackages ? app.subPackages.length : 0;
let subp = 0;
if (app.subPackages) {
app.subPackages.map((p) => {
if (p.plugins != undefined) {
subp++;
}
});
}
let appPluginNum = app.plugins ? Object.keys(app.plugins).length : 0;
appPluginNum += subp;
let appPluginId = [];
if (app.plugins) {
Object.keys(app.plugins).map((ap) => {
appPluginId.push({
name: ap,
id: app.plugins[ap].provider,
});
});
}
let analysisInfo = {
name: app.global.window.navigationBarTitleText,
pageNum: pageNum,
subPackageNum: subPackageNum,
appPluginNum: appPluginNum,
appPluginIdInfo: appPluginId,
};
目前支持的解析信息为:
字段 | 说明 |
---|---|
name | 小程序名称 |
pageNum | 主包页面个数 |
subPackageNum | 分包个数 |
appPluginNum | 插件个数 |
appPluginIdInfo | 插件信息 |
体验地址
Demo 地址
小程序包基础信息检测:
http://tcb.xuedingmiao.com/mp
页面比较简陋(🐶)
使用方法:
- 打开地址后直接拖拽上传即可确认基础信息
- 使用接口:表单提交(
POST
)代码包至http://tcb.xuedingmiao.com/mp/checkpkg
视频演示:
https://www.bilibili.com/video/BV1T64y1v7ZX
参考资料
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)