如何使用独立的 Expo 模块

编辑

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


在现有项目中创建 Expo 模块的推荐方法Expo Modules API: 开始使用 指南中进行了描述。本教程解释了在现有项目中使用 create-expo-module 创建的模块的另外两种方法:

这些方法在您仍想将模块与应用程序分开或与其他开发人员共享时非常有用。

使用 monorepo

您的项目应该使用以下结构:

  • apps: 存储多个项目的目录,包括 React Native 应用。
  • packages: 存储您应用使用的不同包的目录。
  • package.json: 根包文件,其中包含 Yarn 工作区配置。
要了解如何将项目配置为 monorepo,请查看 与 monorepos 一起工作 指南。

1

初始化新模块

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

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

2

设置工作区依赖

将您的本地模块从 packages 添加到您应用的依赖中。更新每个使用您本地模块的 apps 目录中的 package.json 文件,并将您的本地模块添加到现有的依赖项中:

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

您现在可以在您的应用中使用该模块。要进行测试,请编辑 app/(tabs)/index.tsx 文件并渲染来自 expo-settings 模块的文本消息:

app/(tabs)/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 注册表的其他人共享。
  • 运行本地 npm 注册表: 使用像 Verdaccio 这样的工具来托管本地 npm 注册表。您可以从此注册表安装模块,这对于管理公司或组织内部的包非常有用。
  • 发布私有包: 使用 EAS Build 的私有注册表 安全地管理私有模块。

4

测试已发布的模块

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

Terminal
npx create-expo-app my-app
cd my-app
npx expo install expo-settings

您现在可以在您的应用中使用该模块!要进行测试,请编辑 app/(tabs)/index.tsx 并渲染来自 expo-settings 的文本消息。

app/(tabs)/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 持久化设置的本地模块的教程。