如何使用独立的 Expo 模块

编辑页面

了解如何在你的项目中使用通过 create-expo-module 创建的独立模块,方法是使用 monorepo 或将包发布到 npm。


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

在现有项目中创建 Expo 模块的推荐方式 详见 Expo Modules API:入门 指南。本教程介绍了在现有项目中使用通过 create-expo-module 创建的模块的另外两种方法:

如果你仍希望将模块与应用分开维护,或与其他开发者共享,这些方法会很有用。

使用 monorepo

你的项目应采用以下结构:

  • apps:用于存放多个项目的目录,包括 React Native 应用。
  • packages:用于保存应用所使用的不同包的目录。
  • package.json:根包文件,包含 Yarn workspaces 配置。
要了解如何将项目配置为 monorepo,请查看 使用 monorepo 指南。

1

初始化一个新模块

在设置好基本的 monorepo 结构后,使用 create-expo-module 创建一个新模块,并加上 --no-example 标志以跳过创建示例应用:

Terminal
npx create-expo-module packages/expo-settings --no-example

2

设置 workspace 依赖

将位于 packages 中的原生模块添加到应用的依赖中。更新 apps 目录下每个将使用该原生模块的应用中的 package.json 文件,并将你的原生模块添加到现有的 dependencies 条目中:

package.json
{ "dependencies": { %%placeholder-start%%... %%placeholder-end%% "expo-settings": "*" %%placeholder-start%%... %%placeholder-end%% } }

3

运行模块

运行其中一个应用,确保一切正常。然后,在 packages/expo-settings 中启动 TypeScript 编译器以监听变更并重新构建模块的 JavaScript:

Terminal
cd packages/expo-settings
npm run build

打开另一个终端窗口,从 apps 目录中选择一个应用,并使用 --clean 选项运行 prebuild 命令。对 monorepo 中的每个应用重复这些步骤,以使用新模块。

Terminal
npx expo prebuild --clean

使用以下命令编译并运行应用:

Terminal
# 在 Android 上运行应用
npx expo run:android
# 在 iOS 上运行应用
npx expo run:ios

现在你就可以在应用中使用该模块了。为了测试它,请编辑应用中的 src/app/index.tsx 文件,并渲染来自 expo-settings 模块的文本消息:

src/app/index.tsx
import React from 'react'; import { Text, View } from 'react-native'; import * as Settings from 'expo-settings'; export default function TabOneScreen() { return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>{Settings.hello()}</Text> </View> ); }

完成此配置后,应用会显示文本 "Hello world! 👋"。

将模块发布到 npm

你可以将模块发布到 npm,并按照以下步骤将其作为依赖安装到项目中。

1

初始化一个新模块

首先使用 create-expo-module 创建一个新模块。请仔细按照提示操作,因为你将发布这个库,并为你的 npm 包选择一个唯一的名称。

Terminal
npx create-expo-module expo-settings

2

运行示例项目

运行其中一个应用,确保一切正常。然后,在项目根目录启动 TypeScript 编译器以监听变更并重新构建模块的 JavaScript:

Terminal
# 在项目根目录中运行此命令以启动 TypeScript 编译器
npm run build

打开另一个终端窗口,编译并运行示例应用:

Terminal
cd example
# 在 Android 上运行示例应用
npx expo run:android
# 在 iOS 上运行示例应用
npx expo run:ios

3

将包发布到 npm

要将你的包发布到 npm,你需要一个 npm 账户。如果你还没有,请在 npm 网站 上创建账户。创建账户后,运行以下命令登录:

Terminal
npm login

进入模块根目录,然后运行以下命令将其发布:

Terminal
npm publish

你的模块现在将被发布到 npm,并可以通过 npm install 安装到其他项目中。

除了将模块发布到 npm 之外,你还可以通过以下方式在项目中使用它:

  • 创建 tarball:使用 npm pack 为模块创建 tarball,然后通过运行 npm install /path/to/tarball 将其安装到项目中。此方法有助于在发布之前本地测试模块,或与无法访问 npm registry 的其他人共享模块。
  • 运行本地 npm registry:使用 Verdaccio 等工具托管本地 npm registry。你可以从该 registry 安装模块,这对于管理公司或组织内部包很有用。
  • 发布私有包:使用 EAS Build 的私有 registry 安全地管理私有模块。

4

测试已发布的模块

要在新项目中测试已发布的模块,请创建一个新应用,并运行以下命令将该模块作为依赖安装:

Terminal
npx create-expo-app@latest my-app --template default@sdk-55
cd my-app
npx expo install expo-settings

现在你就可以在应用中使用该模块了!要测试它,请编辑 src/app/index.tsx 并渲染来自 expo-settings 的文本消息。

src/app/index.tsx
import React from 'react'; import * as Settings from 'expo-settings'; import { Text, View } from 'react-native'; export default function TabOneScreen() { return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>{Settings.hello()}</Text> </View> ); }

最后,通过执行以下命令预构建你的项目并运行应用:

Terminal
# 从头重新生成原生项目目录
npx expo prebuild --clean
# 在 Android 上运行示例应用
npx expo run:android
# 在 iOS 上运行示例应用
npx expo run:ios

完成此配置后,你会看到应用中显示文本 "Hello world! 👋"。

后续步骤

封装第三方原生库

了解如何在 Expo 模块中封装第三方原生库。

教程:创建原生模块

一个关于创建使用 Expo Modules API 持久化设置的原生模块的教程。