Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

添加功能 :是否可以不用expo打包方式 自己添加一种rn的打包方式 #1828

Closed
westeast opened this issue Jan 6, 2019 · 7 comments
Assignees

Comments

@westeast
Copy link

westeast commented Jan 6, 2019

问题描述
expo打的包太大,最小大小也为110M, 实际产品没法使用,因为expo里自己打包进支了facebook google的及其它一些大概20多个pods包,完全没有用。想添加一个rn本地打包的方法。

复现步骤
expo build:ios 打包后在expo上下载 100多M

// 这里可以贴代码

期望行为
使用rn本向的打包方法,自己编译,以灵活控制包的大小

报错信息

系统信息

Taro v1.2 及以上版本已添加 taro info 命令,方便大家查看系统及依赖信息,运行该命令后将结果贴下面即可。

  • 操作系统: [e.g. Windows 10]
  • Taro 版本 [e.g. v.0.0.64]
  • Node.js 版本 [e.g. v9.0.0]
  • 报错平台 [h5, weapp]

补充信息
如果自己开发这个打包方式,有什么指导意见?
我现在的思路就是,生成 .rn_temp模板的时候,直接生成rn本向的就行,不用expo 的,这个思路 是否对?

附加信息2
深入了解了expo 打包的过程,他把这些第三方库都打包的ipa 中了,这些对我们 国内的开发者来说都是没用的:

Analyzing dependencies
Fetching podspec for `React` from `../node_modules/react-native`
Fetching podspec for `yoga` from `../node_modules/react-native/ReactCommon/yoga`
Downloading dependencies
Using Amplitude-iOS (3.14.1)
Using Analytics (3.6.10)
Using AppAuth (0.95.0)
Using Bolts (1.9.0)
Using Branch (0.24.2)
Using CocoaLumberjack (3.2.1)
Using Crashlytics (3.12.0)
Using DoubleConversion (1.1.5)
Using ExpoKit (2.6.8)
Using FBAudienceNetwork (4.28.1)
Using FBSDKCoreKit (4.39.0)
Using FBSDKLoginKit (4.39.0)
Using FBSDKShareKit (4.39.0)
Using Fabric (1.9.0)
Using Folly (2016.09.26.00)
Using GPUImage (0.1.7)
Using Google-Maps-iOS-Utils (2.1.0)
Using Google-Mobile-Ads-SDK (7.22.0)
Using GoogleAppUtilities (1.1.2)
Using GoogleAuthUtilities (2.0.2)
Using GoogleMaps (2.5.0)
Using GoogleNetworkingUtilities (1.2.2)
Using GoogleSignIn (3.0.0)
Using GoogleSymbolUtilities (1.1.2)
Using GoogleUtilities (1.3.2)
Using JKBigInteger2 (0.0.5)
Using React (0.55.4)
Using boost-for-react-native (1.63.0)
Using glog (0.3.4)
Using lottie-ios (2.5.2)
Using yoga (0.55.4.React)
Generating Pods project
Integrating client project

建议
expo 打包和rn打包方式 共存,可以在taro init myapp的时候做一个打包方式的选择
这样对不关心包大小 ,想方便的就用expo
对使用过rn,想灵活控制打包内容的就用rn本向打包方式,

自己也看了expo本身的本地打包方式,即在.rn_temp目录里执行 exp detach然后自动会下载 ios及android的原生文件夹,但这里下载 后的内容和rn还是有很大区别的,他这里还是引用了很多expo的库,打出来的包还是很大。

同时自己按expo的官方文档 ,自己走了一边,发现本地打包还是有问题:
本地打包的时候,expo并没有像rn那样把js之类打包到ipa或者 apk中,还是通过一个exp://host/这样的协议去拉取。如果是本地打包,这个host就是你本机,如果是用epxo 服务器打包,这个host就是国外的expo网站,国内用户请求起来也很慢。不知道expo是否有什么选项把js之类的都打包到ipa或者 apk中,就像react-native那样,只要打包好,在哪个环境都能正常打开,及时没网也不会显示下面的:
image

所以期望taro能尽快支持使用npm run build:rn时在.rn_temp目录生成的是一个纯react native 的源码,谢谢~

同时自己也看了taro/taro-cli/src/rn.js中的代码,看生成.rn_temp中文件 的过程都是在这里做的,是否就是如果想生成纯rn的代码只用修改这里的文件。

@taro-bot
Copy link

taro-bot bot commented Jan 6, 2019

欢迎提交 Issue~

如果你提交的是 bug 报告,请务必遵循 Issue 模板的规范,尽量用简洁的语言描述你的问题,最好能提供一个稳定简单的复现。🙏🙏🙏

如果你的信息提供过于模糊或不足,或者已经其他 issue 已经存在相关内容,你的 issue 有可能会被关闭。

Good luck and happy coding~

@taro-bot
Copy link

taro-bot bot commented Jan 7, 2019

CC @Pines-Cheng

@Pines-Cheng
Copy link
Contributor

可以参考一下这个issue:expo/expo#205

Hi! Please see this section of the docs and the related App Thinning docs from Apple.

The remaining size of the bundle (around 20MB) contains the Expo runtime and makes sure that your users have all of the native code required to receive any updates you may publish.

@westeast
Copy link
Author

westeast commented Jan 7, 2019

@Pines-Cheng 多谢了,大小 的问题,可以解决了。
但还有一个问题,不想通过ota的方式来打包js,想像expo像rn那样打包,因为 打开rn的应用的时候,app并没有像expo那样需要从某个地方请求一个bundle.js这样的文件。 taro或者expo是否可以做到这样,直接把js打包到app呢? 我理解rn就是打包到app的

如果有理解错的地方,多谢指出,谢谢~

@Pines-Cheng
Copy link
Contributor

OTA 更新是可以配置为 自动更新/手动更新,还可以 禁用更新的,相关的文档在这里:Configuring OTA Updates

设置 updates.enabled 可以 false 在独立应用程序中完全禁用 OTA JavaScript 更新。这将忽略从 Expo 服务器获取应用程序包的所有代码路径。在这种情况下,您的应用的所有更新都需要通过iOS App Store和/或Google Play商店。

@westeast
Copy link
Author

westeast commented Jan 7, 2019

@Pines-Cheng 明白了多谢,也就是expo打包时,js代码在包里也是有一份的,只不过这一份是否通过ota来更新 ,是看自己的配置对吧?

@Pines-Cheng
Copy link
Contributor

是的,就是这个意思。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants