React Native项目共用package.json导致App clip体积过大如何优化
同类问题非常普遍,以下是经过实操验证的可行方案:
方案1:Metro打包配置按需剔除(改造成本最低)
- 给App Clip单独创建入口文件
index.clip.js,仅引入App Clip需要的业务模块和依赖,不要引入主应用独有的逻辑 - 修改
metro.config.js配置,新增resolve.alias规则,将App Clip用不到的重依赖(例如第三方支付SDK、地图SDK、全量埋点库等)指向提前创建的空mock文件,打包时这些依赖就不会被打进产物 - 配合
extraNodeModules配置,仅给App Clip的构建流程加载必要依赖,完全不影响主应用的正常开发构建 - 实测该方案可砍掉60%以上的无用依赖体积,无需调整现有项目结构,适配成本极低
方案2:Monorepo架构拆分依赖(长期迭代首选)
- 将现有项目重构为Monorepo结构,拆分出三个独立包:公共基础包、主应用包、App Clip包
- 公共基础包仅存放两端共用的依赖、公共组件、通用工具方法
- 主应用包和App Clip包分别管理自身独有的依赖,完全不会出现依赖冗余的问题
- 该方案依赖拆分彻底,适合长期迭代的中大型项目,但需要调整现有代码的导入路径,改造成本相对较高
方案3:构建时动态替换package.json(临时快速验证用)
- 提前写好仅包含App Clip所需依赖的
package.clip.json配置文件 - 写简易构建脚本,打App Clip包前自动将当前的
package.json和锁文件替换为App Clip专属版本,执行依赖安装后再运行打包命令 - 打包完成后自动换回主应用的
package.json和锁文件,不会影响日常开发 - 该方案无需修改项目代码和打包配置,适合临时快速验证,但要注意不同依赖版本的兼容性问题,避免出现运行异常
注意:所有方案落地后都需要用Xcode的App Thinning功能校验最终的App Clip体积,苹果要求App Clip解压后的最终体积不能超过15MB,超过后用户无法在蜂窝网络下直接触发打开。
内容的提问来源于stack exchange,提问作者user2983099
相关产品推荐
相关产品推荐

