问题描述
miniprogram-ci上传的小程序代码,在一些iPhone手机上,会发现不能绑定数据;但是同样的代码,使用开发者工具上传,就不会有问题。
目标环境
iPhone 12,系统版本是14.5.1,微信的版本是 8.0.20。
复现步骤
- 使用uni-app作为开发框架
- 然后编写node-js脚本使用uni-app的命令行工具编译项目
- 使用miniprogram-ci去分析uni-app编译的代码,剔除无依赖文件
- 使用miniprogram-ci上传;使用开发者工具上传;
uni编译
spawn.sync('uni', ['build', '-p', 'mp-weixin'], { stdio: 'inherit' });
分析小程序模块
console.info('对编译产物进行代码分析\n');
const analyseResult = await ci.analyseCode(
new ci.Project({
appid: item.appid,
type: 'miniProgram',
projectPath: path.resolve(__dirname, '../dist/build/mp-weixin'),
privateKeyPath: item.privateKeyPath,
ignores: [],
}),
);
console.info('移除无依赖文件\n');
const exts = new Set(['.js', '.wxss', '.wxml', '.json']);
analyseResult.files.forEach(item => {
if (exts.has(item.ext) && item.moduleId === null) {
console.log(`${item.path} ${item.size}\n`);
fs.unlinkSync(path.resolve(__dirname, '../dist/build/mp-weixin/', item.path));
}
});
上传小程序代码
console.info('上传编译产物到微信云\n');
/**
* miniprogram-ci的源代码是没有公开的,我在测试的过程中发现ci.Project这个类,会缓存项目包含的文件。
* 也就是说,如果你对项目进行了分析,分析完成之后删除了无依赖文件,之前new ci.Project出来的实例对象是不会有任何更新的。
* 如果你依然使用同一个ci.Project实例对象去执行ci.upload,那么ci就会抛出文件不存在的异常。
*/
const now = new Date();
const uploadResult = await ci.upload({
desc: `[${now.toLocaleString()}] CI Uploaded`,
project: new ci.Project({
appid: item.appid,
type: 'miniProgram',
projectPath: path.resolve(__dirname, '../dist/build/mp-weixin'),
privateKeyPath: item.privateKeyPath,
ignores: [],
}),
robot: 2,
setting: {},
version: package.version,
onProgressUpdate: task => {
if (task.status === 'done') {
console.log(`[${task.id}] ${task.message}`);
}
},
});
console.info('上传完成,上传结果:\n');
console.log(uploadResult);
大兄弟找到问题所在了吗?我这也是这种情况,工具上传没问题,脚本上传,就会有问题