如何使用独立的 Expo 模块
了解如何通过使用 monorepo 或将包发布到 npm,在项目中使用通过 create-expo-module 创建的独立模块。
Expo 模块 API:开始使用 指南中介绍了在现有项目中创建 Expo 模块的推荐方法。本教程介绍了在现有项目中使用 create-expo-module
创建的模块的另外两种方法:
¥The recommended way to create an Expo module in an existing project is described in the Expo Modules API: Get Started guide. This tutorial explains two additional methods for using a module created with create-expo-module
in an existing project:
如果你仍然希望将模块与应用分开或与其他开发者共享,这些方法非常有用。
¥These methods are useful if you still want to keep the module separate from the application or share it with other developers.
使用大仓
¥Use a monorepo
你的项目应使用以下结构:
¥Your project should use the following structure:
-
应用:用于存储多个项目(包括 React Native 应用)的目录。
¥apps: A directory to store multiple projects, including React Native apps.
-
软件包:用于保存应用使用的不同软件包的目录。
¥packages: A directory to keep different packages used by your apps.
-
package.json:这是包含 Yarn 工作区配置的根包文件。
¥package.json: This is the root package file that contains the Yarn workspaces configuration.
要了解如何将你的项目配置为 monorepo,请查看 使用单一存储库 指南。
1
2
3
Run the module
Run one of your apps to ensure everything works. Then, start the TypeScript compiler in packages/expo-settings to watch for changes and rebuild the module's JavaScript:
-
cd packages/expo-settings
-
npm run build
Open another terminal window, select an app from the apps directory, and run the prebuild
command with the --clean
option. Repeat these steps for each app in your monorepo to use the new module.
-
npx expo prebuild --clean
Compile and run the app with the following command:
# Run the app on Android
-
npx expo run:android
# Run the app on iOS
-
npx expo run:ios
You can now use the module in your app. To test it, edit the app/(tabs)/index.tsx file in your app and render the text message from the expo-settings
module:
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>
);
}
After this configuration, the app displays the text "Hello world! 👋".
Publish the module to npm
You can publish the module on npm and install it as a dependency in your project by following the steps below.
1
2
Run the example project
Run one of your apps to ensure everything works. Then, start the TypeScript compiler in the root of your project to watch for changes and rebuild the module's JavaScript:
# Run this in the root of the project to start the TypeScript compiler
-
npm run build
Open another terminal window, compile and run the example app:
-
cd example
# Run the example app on Android
-
npx expo run:android
# Run the example app on iOS
-
npx expo run:ios
3
Publish the package to npm
To publish your package to npm, you need an npm account. If you don't have one, create an account on the npm website. After creating an account, log in by running the following command:
-
npm login
Navigate to the root of your module, then run the following command to publish it:
-
npm publish
Your module will now be published to npm and can be installed in other projects using npm install
.
Apart from publishing your module to npm, you can use it in your project in the following ways:
- Create a tarball: Use
npm pack
to create a tarball of your module, then install it in your project by runningnpm install /path/to/tarball
. This method is helpful for testing your module locally before publishing it or sharing it with others who don't have access to the npm registry. - Run a local npm registry: Use a tool such as Verdaccio to host a local npm registry. You can install your module from this registry, which is useful for managing internal packages within a company or organization.
- Publish a private package: Use a private registry with EAS Build to manage private modules securely.
4
Test the published module
To test the published module in a new project, create a new app and install the module as a dependency by running the following command:
-
npx create-expo-app my-app
-
cd my-app
-
npx expo install expo-settings
You can now use the module in your app! To test it, edit app/(tabs)/index.tsx and render the text message from expo-settings.
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>
);
}
Finally, prebuild your project and run the app by executing the following commands:
# Re-generate the native project directories from scratch
-
npx expo prebuild --clean
# Run the example app on Android
-
npx expo run:android
# Run the example app on iOS
-
npx expo run:ios
After this configuration, you see the text "Hello world! 👋" displayed in the app.
下一步
¥Next steps
了解如何在 Expo 模块中封装第三方原生库。
关于使用 Expo Modules API 创建保留设置的原生模块的教程。