reactnativecn / react-native-pushy

React Native 极速热更新服务
https://pushy.reactnative.cn
Other
1.77k stars 257 forks source link

为什么一定要上传原生包呢? #407

Open GithubGaoYang opened 1 year ago

GithubGaoYang commented 1 year ago

理论上原生包的作用只是用于版本判断,真正需要的信息应该也就是编译时间、版本号、jsbundle文件; 其中,jsbundle文件可能会用于差量更新,暂且理解为必选项。 但编译时间、版本号可以通过人为设定的方式而不是上传原生包的方式实现。

上传原生包这一过程,提高了发布流程的复杂性,也不方便开发者理解,可不可以在后续版本中取消这一流程呢?

sunnylqm commented 1 year ago

这里的关键是,基准包的jsbundle文件和服务器端的jsbundle文件需要完全一致,一个字节都不能差,那如何做到这一点呢?

确实是只需要对比jsbundle文件,但jsbundle文件要如何单独提交呢?如何保证单独提交的jsbundle文件和你分发给用户的最终app完全一致呢?假设一个极端情况,你的jsbundle文件会在打包时把系统当前时间给作为环境变量打印进去,那么即便你一行代码都没改,你先打包jsbundle,再打包原生包,这个时候bundle已经不可能一致了。

sunnylqm commented 1 year ago

但编译时间、版本号可以通过人为设定的方式而不是上传原生包的方式实现。

理论上确实是这样,理论上人为设定也可以代替typescript的类型检查,但现实就是,错误大多是人为的,而自动化才是唯一可靠的解决方案

hengkx commented 10 months ago

微软的code push 好像就不需要 原生包

sunnylqm commented 10 months ago

因为codepush是走全量更新,不做差量对比

FrankFeng1116 commented 9 months ago

因为codepush是走全量更新,不做差量对比

codepush也是增量更新的

sunnylqm commented 6 months ago

不太清楚他们的机制,但我们的增量更新需要做二进制对比,因此要求一个字节都不能差,这样也可以更广泛的支持源文件格式,无论是纯文本js,还是任何版本的hermes二进制