在现有库中集成
编辑
学习如何将 Expo 模块 API 集成到现有的 React Native 库中。
有些情况下,您可能希望将 Expo 模块 API 集成到现有的 React Native 库中。例如,逐步重写您的库,或者利用 Android 生命周期监听器 和 iOS AppDelegate 订阅者 来自动设置库,可能会很有用。
本指南将帮助您设置现有的 React Native 库以访问 Expo 模块 API。
先决条件
在您项目的根目录下创建 expo-module.config.json 文件,并在其中添加一个空对象 {}。您稍后将填写它以启用特定功能。
创建此文件对于 Expo 自动链接 识别您的库为 Expo 模块并自动链接您的本机代码是必要的。
1
2
将 Expo 包添加为依赖项
在您的 package.json 中将 expo 包添加为对等依赖 — 我们推荐使用 * 作为版本范围,以避免在用户的 node_modules 目录中造成任何重复的包。
您的库还需要依赖于 expo-modules-core,但仅作为开发依赖 — 它已经由依赖于您库的项目中的 expo 包提供,版本与项目中使用的特定 SDK 兼容。
{ %%placeholder-start%%... %%placeholder-end%% "devDependencies": { "expo-modules-core": "^X.Y.Z" }, "peerDependencies": { "expo": "*" }, "peerDependenciesMeta": { "expo": { "optional": true } } }
3
创建本机模块
根据下面的模板创建 Kotlin 和 Swift 文件:
package my.module.package import expo.modules.kotlin.modules.Module import expo.modules.kotlin.modules.ModuleDefinition class MyModule : Module() { override fun definition() = ModuleDefinition { // 定义组件在此处 } }
import ExpoModulesCore public class MyModule: Module { public func definition() -> ModuleDefinition { // 定义组件在此处 } }
然后,将您的类添加到 expo-module.config.json 文件的 Android 和/或 iOS modules 中。Expo 自动链接将自动将这些类链接为用户项目中的本机模块。
{ "ios": { "modules": ["MyModule"] }, "android": { "modules": ["my.module.package.MyModule"] } }
如果您在工作区中已经有一个示例应用,请确保模块正确链接。
- 在 Android 中,本机模块类将在构建之前作为 Gradle 构建任务的一部分自动链接。
- 在 iOS 中,您需要运行
pod install来链接新类。
这些模块类现在可以通过 expo-modules-core 包中的 requireNativeModule 函数从 JavaScript 代码访问。我们建议创建一个单独的文件,导出本机模块以简化操作。
import { requireNativeModule } from 'expo-modules-core'; export default requireNativeModule('MyModule');
现在类已经设置并链接,您可以开始实现其功能。请参阅 本机模块 API 参考页和链接到 示例 的简单到中等复杂的实际模块,以了解如何使用 API。