创建模块库
React Native 有一个丰富的生态系统库来解决常见问题。我们在 reactnative.directory 网站上收集 React Native 库,这是一个很好的资源,值得每个 React Native 开发者收藏。
有时,你可能会开发一个模块,希望将其提取到一个单独的库中以供代码重用。这可以是一个你希望在所有应用中重用的库,一个你希望作为开源组件分发到生态系统的库,甚至是一个你希望出售的库。
在本指南中,你将学习:
- 如何将模块提取到一个库中
- 如何使用 NPM 分发库
将模块提取到一个库中
你可以使用 create-react-native-library
工具来创建一个新库。该工具设置了一个新的库,其中包含所有需要的样板代码:所有配置文件和各种平台所需的文件。它还带有一个交互式菜单,引导你完成库的创建过程。
要提取模块到一个单独的库中,你可以按照以下步骤操作:
- 创建新库
- 将代码从应用移动到库
- 更新代码以反映新的结构
- 发布它。
1. 创建库
- 通过运行以下命令开始创建过程:
npx create-react-native-library@latest <Name of Your Library>
- 为你的模块添加一个名称。它必须是一个有效的 npm 名称,所以应该全部是小写的。你可以使用
-
来分隔单词。 - 为包添加一个描述。
- 继续填写表单,直到你到达问题 "你想要开发什么类型的库?"
- 为了本指南的目的,选择 Turbo 模块 选项。注意你可以创建新架构和旧架构的库。
- 然后,你可以选择你想要一个访问平台的库(Kotlin 和 Objective-C)还是一个共享的 C++ 库(Android 和 iOS 的 C++)。
- 最后,选择
Test App
作为最后一个选项。此选项创建一个已经配置在库文件夹中的单独应用的库。
一旦交互提示完成,工具会创建一个文件夹,其结构如下:
随意探索工具为你创建的代码。然而,最重要的部分是:
android
文件夹:这是 Android 代码所在的位置cpp
文件夹:这是 C++ 代码所在的位置ios
文件夹:这是 iOS 代码所在的位置src
文件夹:这是 JS 代码所在的位置
package.json
已经配置了所有信息,包括包的名称和描述。注意 package.json
也已经配置为运行 codegen。
"codegenConfig": {
"name": "RN<your module name>Spec",
"type": "all",
"jsSrcsDir": "src",
"outputDir": {
"ios": "ios/generated",
"android": "android/generated"
},
"android": {
"javaPackageName": "com.<name-of-the-module>"
}
},
最后,库已经包含所有基础设施,以便库可以与 iOS 和 Android 链接。
2. 将代码从应用复制到库
本指南的其余部分假设你有一个本地 Turbo Native 模块在你的应用中,遵循网站上其他指南中的指南:平台特定的 Turbo Native 模块,或 跨平台的 Turbo Native 模块。但它也适用于组件和旧架构的模块和组件。你需要复制和更新你需要的文件。
- [旧架构不需要这一步] 将你在应用的
specs
文件夹中的代码移动到create-react-native-library
创建的src
文件夹中。 - 更新
index.ts
文件以正确导出 Turbo Native 模块规范,以便可以从库中访问它。例如:
import NativeSampleModule from './NativeSampleModule';
export default NativeSampleModule;
-
复制原生模块:
- 用你在应用中为原生模块编写的代码替换
android/src/main/java/com/<name-of-the-module>
中的代码,如果有的话。 - 用你在应用中为原生模块编写的代码替换
ios
文件夹中的代码,如 果有的话。 - 用你在应用中为原生模块编写的代码替换
cpp
文件夹中的代码,如果有的话。
- 用你在应用中为原生模块编写的代码替换
-
[旧架构不需要这一步] 更新所有从旧规范名称到新规范名称的引用,新规范名称在库的
package.json
文件的codegenConfig
字段中定义。例如,如果应用的package.json
中设置AppSpecs
为codegenConfig.name
,而在库中称为RNNativeSampleModuleSpec
,则必须将AppSpecs
的所有出现替换为RNNativeSampleModuleSpec
。
这就完成了!你已经将所有需要的代码从应用移动到一个单独的库中。
测试你的库
create-react-native-library
带有一个有用的示例应用,已配置为与库正常工作。这是一个很好的测试方法!
如果你查看 example
文件夹,你会发现一个与 react-native-community/template
创建的新 React Native 应用相同的结构。
要测试你的库:
- 导航到
example
文件夹。 - 运行
yarn install
来安装所有依赖项。 - 对于 iOS 来说,你需要安装 CocoaPods:
cd ios && pod install
。 - 使用
yarn android
从example
文件夹构建和运行 Android。 - 使用
yarn ios
从example
文件夹构建和运行 iOS。