# react-native-create-lib **Repository Path**: mirrors_listenzz/react-native-create-lib ## Basic Information - **Project Name**: react-native-create-lib - **Description**: Tool to create a React Native library module or view module with a single command - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-09 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # react-native-create-lib 一行命令创建原生模块/组件库,支持 Monorepo 模式。已迁移到 ReactNative 新架构。 > 如何支持 Monorepo 模式?请参考 [Monorepo 使用说明](#monorepo-使用说明) ## 基本用法 创建基础库(默认创建原生模块): ```bash $ npx react-native-create-lib MyLib ``` 创建自定义包名的库: ```bash $ react-native-create-lib --module-name @sdcx/wechat --repo-name react-native-wechat wechat ``` 创建原生组件库: ```bash $ react-native-create-lib --module-type components ImageCrop ``` 创建同时包含模块和组件的库: ```bash $ react-native-create-lib --module-type all MyLib ``` 创建完成后,在新创建的库目录中安装依赖: ```bash $ cd MyLib $ npm install ``` ## 参数说明 ### 必需参数 - **``**: 库的名称(必需),将用于生成类名和默认包名 ### 可选参数 #### `--module-type ` 指定要生成的原生代码类型。 - **可选值**: `modules` | `components` | `all` - **默认值**: `modules` - **说明**: - `modules`: 创建原生模块(TurboModule),用于提供原生功能接口 - `components`: 创建原生组件(NativeComponent),用于渲染原生 UI 组件 - `all`: 同时创建原生模块和原生组件 **示例**: ```bash # 创建原生模块(默认) $ react-native-create-lib MyModule # 创建原生组件 $ react-native-create-lib --module-type components ImageCrop # 同时创建模块和组件 $ react-native-create-lib --module-type all MyLib ``` #### `--module-name ` 指定 npm 包名,将写入 `package.json` 的 `name` 字段。 - **默认值**: `react-native-{name}` (name 转换为 param-case) - **示例**: ```bash $ react-native-create-lib --module-name @sdcx/wechat wechat # 生成的 package.json 中 name 为 "@sdcx/wechat" ``` #### `--repo-name ` 指定仓库名称,用于生成 GitHub 链接和目录名。 - **默认值**: `react-native-{name}` (name 转换为 param-case) - **示例**: ```bash $ react-native-create-lib --repo-name my-custom-repo MyLib # 将创建 my-custom-repo 目录 ``` #### `--prefix ` 指定类名前缀,用于生成原生代码中的类名。 - **默认值**: `RN` - **示例**: ```bash $ react-native-create-lib --prefix SDCX MyLib # 生成的类名将为 SDCXMyLib 而不是 RNMyLib ``` #### `--package-identifier ` 指定 Android 的 Java 包标识符。 - **默认值**: `com.reactnative.{name}` (name 转换为小写) - **示例**: ```bash $ react-native-create-lib --package-identifier com.mycompany.mylib MyLib # Android 代码将使用 com.mycompany.mylib 作为包名 ``` #### `--platforms ` 指定要生成的平台,多个平台用逗号分隔。 - **默认值**: `ios,android` - **可选值**: `ios` | `android` | `ios,android` - **示例**: ```bash # 只生成 iOS 平台 $ react-native-create-lib --platforms ios MyLib # 只生成 Android 平台 $ react-native-create-lib --platforms android MyLib ``` #### `--github-account ` 指定 GitHub 账户名,用于生成仓库链接。 - **默认值**: `github-account` - **示例**: ```bash $ react-native-create-lib --github-account myusername MyLib # 生成的链接为 https://github.com/myusername/react-native-mylib ``` #### `--author-name ` 指定作者名称,将写入 `package.json` 和 `LICENSE`。 - **默认值**: `author-name` - **示例**: ```bash $ react-native-create-lib --author-name "John Doe" MyLib ``` #### `--author-email ` 指定作者邮箱,将写入 `package.json` 和 `LICENSE`。 - **默认值**: `author-email@gmail.com` - **示例**: ```bash $ react-native-create-lib --author-email john@example.com MyLib ``` #### `--license ` 指定许可证类型,将写入 `package.json` 和 `LICENSE` 文件。 - **默认值**: `MIT` - **示例**: ```bash $ react-native-create-lib --license Apache-2.0 MyLib ``` ### 其他选项 - **`-V, --version`**: 显示版本号 - **`-h, --help`**: 显示帮助信息 ## 完整示例 创建一个完整的自定义库: ```bash $ react-native-create-lib \ --module-name @mycompany/image-crop \ --repo-name react-native-image-crop \ --module-type components \ --prefix MyCompany \ --package-identifier com.mycompany.imagecrop \ --github-account mycompany \ --author-name "Jane Doe" \ --author-email jane@mycompany.com \ --license MIT \ image-crop ``` ## Monorepo 使用说明 在 Monorepo 中,建议先用官方命令创建主 React Native 工程,再通过 **Yarn Workspaces** 或 **pnpm Workspaces** 在 `packages/` 下管理多个原生库,主工程通过 workspace 依赖和路径配置感知这些库。 ### 1. 创建主工程 使用 React Native 官方 CLI 创建主项目(不要用本库创建整个项目): ```bash npx @react-native-community/cli init MyApp cd MyApp ``` ### 2. 启用 Workspace 在项目根目录的 `package.json` 中声明 workspaces,使主工程能识别 `packages/` 下的包。 **Yarn:** ```json { "name": "my-app", "private": true, "workspaces": [ "packages/*" ] } ``` **pnpm:** ```json { "name": "my-app", "private": true, "packageManager": "pnpm@9.0.0", "pnpm": { "overrides": {} } } ``` 并在项目根创建 `pnpm-workspace.yaml`: ```yaml packages: - 'packages/*' ``` 然后执行 `yarn install` 或 `pnpm install` 以链接 workspace 包。 ### 3. 添加模块包 在 `packages/` 目录下使用本库创建新的原生模块/组件库(`--repo-name` 可省略 `react-native-` 前缀以保持简短): ```bash cd packages/ # 原生模块(如 wechat) npx react-native-create-lib --module-name @sdcx/wechat --repo-name wechat --prefix RN --package-identifier com.sdcx.wechat wechat # 原生组件(如 image-crop) npx react-native-create-lib --module-name @sdcx/image-crop --repo-name image-crop --module-type components --prefix RN --package-identifier com.sdcx.imagecrop image-crop ``` 创建完成后,在对应库目录中安装依赖(若使用 workspace,根目录执行一次 `yarn` / `pnpm install` 即可)。 ### 4. 主工程感知 lib:配置 tsconfig 在主工程根目录的 `tsconfig.json` 中配置 `paths`,让 TypeScript 能解析 workspace 包源码: ```json { "compilerOptions": { "paths": { "@sdcx/wechat": ["./packages/wechat/src"], "@sdcx/image-crop": ["./packages/image-crop/src"], "@sdcx/*": ["app/sdcx/*"] } } } ``` 按实际包名与路径增减或修改 `paths` 条目。 ### 5. 主工程感知 lib:配置 Babel alias 在主工程的 `babel.config.js` 中为 `module-resolver` 配置与 `paths` 一致的 alias,保证运行时和打包能正确解析: ```js module.exports = { presets: ['module:@react-native/babel-preset'], plugins: [ [ 'module-resolver', { root: ['./'], extensions: ['.ts', '.tsx', '.ios.js', '.android.js', '.js', '.json'], alias: { '@sdcx/wechat': './packages/wechat/src', '@sdcx/image-crop': './packages/image-crop/src', '@sdcx/*': 'app/sdcx/*', }, }, ], ], }; ``` 若尚未安装 `babel-plugin-module-resolver`,需先安装: ```bash yarn add -D babel-plugin-module-resolver # 或 pnpm add -D babel-plugin-module-resolver ``` ### 6. 主工程依赖 workspace 包 在主工程根目录的 `package.json` 中,将 lib 作为 workspace 依赖加入: ```json { "dependencies": { "@sdcx/wechat": "*", "@sdcx/image-crop": "*" } } ``` 使用 `*` 表示使用当前 workspace 内的版本;也可写为 `"workspace:*"`(Yarn 3+ / pnpm)明确指定 workspace 协议。配置完成后执行 `yarn install` 或 `pnpm install`,即可在业务代码中 `import` 并使用这些包。 ## License [MIT](./LICENSE)