React Native Expo初始化模板为何存在平台代码结构差异
两类Expo模板结构差异的核心原因
两个模板对应Expo两套完全不同的开发工作流,结构差异是工作流的设计定位决定的:
- 预置Tabs导航、默认启用TypeScript、无单独平台目录的是*托管工作流(Managed Workflow)*模板。这个模式下Expo把双端原生层的所有基础工程代码、构建配置、通用原生能力全部封装托管,开发者只需要编写JS/TS层业务代码即可,不需要接触原生层内容,因此模板不会暴露
ios、android原生目录,提供的Tabs样板代码也全是跨端通用的业务层示例,自然不会做平台代码拆分。 - 自带
ios、android两个独立目录的最小空白模板是*裸工作流(Bare Workflow)*模板。这个模式的项目结构和React Native官方CLI初始化的项目基本一致,只是额外预集成了Expo SDK的基础依赖,开发者拥有原生层的完全修改权限,可以自行添加第三方原生模块、调整原生构建配置、修改原生层代码。
原生目录的作用澄清
看到ios、android两个独立目录完全不需要误以为要重复编写两套业务逻辑,这两个目录和跨端业务代码开发没有冲突:
- 这两个目录存放的全是APP运行所需的原生工程壳文件:比如iOS端的Xcode工程配置、权限声明文件,Android端的Gradle构建配置、应用清单文件,本质是给JS业务代码提供可运行的原生容器,并非要求开发者在这两个目录中编写业务逻辑。
- 不管是Expo裸工作流还是纯React Native项目,默认都支持一套JS/TS业务代码运行在双端,开发者编写的业务代码默认都存放在根目录下双端共享。只有需要实现平台差异化逻辑时,才需要通过
Platform模块做分支判断,或者给文件加.ios.jsx/.android.jsx这类平台专属后缀做逻辑拆分,这些适配操作全部在JS/TS业务层完成,和原生目录没有关联。 - 托管工作流并非不存在原生工程部分,只是Expo把这部分内容隐藏起来代为维护了。如果后续需要修改原生配置、添加自定义原生模块,随时可以通过
expo prebuild命令生成和裸工作流完全一致的ios、android目录,获得原生层的修改权限。
内容的提问来源于stack exchange,提问作者user6377312
相关产品推荐
相关产品推荐

