type
status
date
slug
summary
tags
category
icon
password
如何使用 Expo Modules 集成原生代码
最近开发一个 React Native 项目时,遇到一个必须调用原生能力的需求,但苦于没有找到合适的开源库可用。无奈之下,我决定尝试使用 Expo Modules 手动集成原生代码。虽然一开始对原生开发并不熟悉,但得益于 Expo Modules 提供的简洁 API 和自动桥接机制,配合 AI 生成 Swift 代码,最终顺利实现了功能。
Expo Modules 是什么?
Expo Modules 是 Expo 团队提供的一种机制,让我们可以用更现代、更简洁的方式,用 Swift(iOS)和 Kotlin(Android) 编写原生模块,并将其暴露给 React Native。
相比传统的原生模块开发方式,Expo Modules 提供了统一的 API、自动注册机制、平台一致性的表现,以及更少的样板代码,是扩展 React Native 功能的理想方案。
Expo Modules 能做什么?
- 用 Swift/Kotlin 编写原生代码
- 用 TypeScript/JS 调用你的模块,无需手动桥接
- 提供自动注册、类型声明、Platform 适配
- 支持自动文档生成、支持 OTA 更新
- 与裸 RN 项目和 Managed Expo 项目都兼容
如何创建一个 Expo Module
首先需要初始化一个原生模块项目:
会自动生成一个包含 iOS 和 Android 原生模块结构的项目,包含如下内容:
安装依赖并构建打包模块:
将模块链接到主项目:
在
expo.config.js 中注册模块插件(如果你用了插件):📱 iOS 端开发示例(Swift)
在
ios/MyNativeModule.swift 文件中:上面代码定义了一个名为
MyNativeModule 的模块,暴露了两个方法:hello() 和 add(a, b)。你无需再处理 bridge、线程、promise 等繁琐逻辑,Expo Modules 会自动管理 JS/Native 之间的交互。
在 JS 中使用
在主项目中调用:
TypeScript 类型会自动推导,无需额外声明。
调试与开发建议
- 使用
expo run:ios或expo run:android构建原生工程
- 推荐结合
Development Build调试(支持原生代码断点)
- 每次修改原生模块后需重新编译项目
发布模块
你可以将模块打包发布到 npm,供其他项目使用:
可结合 expo-modules-autolinking 实现模块自动链接。
- 作者:wdkang
- 链接:https://blog.wdkang.com/article/expo-modules
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。









