{"_id":"@bingtang-rn/react-native-ultimate-config","_rev":"2-2664cc718129980a523caaf6f96e67d9","name":"@bingtang-rn/react-native-ultimate-config","dist-tags":{"latest":"6.0.2"},"versions":{"6.0.1":{"name":"@bingtang-rn/react-native-ultimate-config","version":"6.0.1","keywords":["react-native","harmony","harmonyos","react-native-ultimate-config"],"license":"MIT","_id":"@bingtang-rn/react-native-ultimate-config@6.0.1","maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"homepage":"https://gitcode.com/rn_ohos_plugin/react_native_ultimate_config","dist":{"shasum":"1054c743a98f9fc4068375fa861c493537642f55","tarball":"https://registry.npmjs.org/@bingtang-rn/react-native-ultimate-config/-/react-native-ultimate-config-6.0.1.tgz","fileCount":62,"integrity":"sha512-CN8hgW9KVEyjpk/J90PE6fQrFjGlz5eMlEMk0f0MW+d+qH5rUrsLSTxd19tqqsDl6ipLtbWTVf5UeeP3gOiqvQ==","signatures":[{"sig":"MEUCIQCAQwjC86nWkfaYfArnWu3dlyaOEa1PUIJhzDfNv6+wZAIgXDz3lEJ6nuVoJk3EPi37/d3TVTltelqWXkOgO6QQC6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72081},"main":"index.js","module":"index.js","engines":{"node":">=18"},"gitHead":"21b84db4f459c0e3e60e60b97a0b16632f8ee0de","harmony":{"alias":"react-native-ultimate-config","autolinking":{"ohPackageName":"@oh-rn/react-native-ultimate-config","cppPackageClassName":"UltimateConfigPackage","etsPackageClassName":"UltimateConfigPackage","cmakeLibraryTargetName":"ultimate_config"},"codegenConfig":[{"version":1,"specPaths":["./src/specs/v1"]}]},"private":false,"scripts":{"codegen-lib":"react-native codegen-harmony --cpp-output-path ./harmony/ultimate_config/src/main/cpp/generated --ets-output-path ./harmony/ultimate_config/src/main/ets/generated"},"_npmUser":{"name":"luyizouyuan","email":"189605613@qq.com"},"repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_ultimate_config","type":"git"},"_npmVersion":"11.12.1","description":"适配鸿蒙版本，提供react_native_ultimate_config组件。","directories":{},"_nodeVersion":"24.15.0","react-native":"index.js","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.3","metro":"^0.81.0","react":"18.2.0","typescript":"5.0.4","@types/react":"18.2.79","react-native":"0.72.5","@react-native/typescript-config":"0.79.5","@react-native-oh/react-native-harmony-cli":"^0.77.50"},"peerDependencies":{"react-native":">=0.72"},"_npmOperationalInternal":{"tmp":"tmp/react-native-ultimate-config_6.0.1_1785415461929_0.6299517055460497","host":"s3://npm-registry-packages-npm-production"}},"6.0.2":{"_id":"@bingtang-rn/react-native-ultimate-config@6.0.2","dist":{"shasum":"4124746e0d819d24ae138e864c78b58bd19b96cc","tarball":"https://registry.npmjs.org/@bingtang-rn/react-native-ultimate-config/-/react-native-ultimate-config-6.0.2.tgz","fileCount":62,"integrity":"sha512-ZGpqEkcYrkXk/sK934lrnVsd3ft8ayk3oZd30GUs5zKeyEwUYHWCtDbOpX/6owS0Z2hR5zAZD86h89p8+TxjXw==","signatures":[{"sig":"MEUCIQCG1RC4cDY8ZATpYOelR7aa/3xOfByvqREgM8vx6kvjkQIgLG2qI9wDIE7GVDqIf1roGhOHcFOmlCJEPDVjTtICqUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCYKL/gJmjrp4tVvJRuZN4URdPQzVzQvYyb5NkUNNsHzgIgKKCsP5PN8F9rFDzk1Zd5xtH1AnDu+uSZwGEbzykR8RU="}],"unpackedSize":72248},"main":"index.js","name":"@bingtang-rn/react-native-ultimate-config","_from":"file:bingtang-rn-react-native-ultimate-config-6.0.2.tgz","module":"index.js","engines":{"node":">=18"},"harmony":{"alias":"react-native-ultimate-config","autolinking":{"ohPackageName":"@bingtang-rn/react-native-ultimate-config","cppPackageClassName":"UltimateConfigPackage","etsPackageClassName":"UltimateConfigPackage","cmakeLibraryTargetName":"ultimate_config"},"codegenConfig":[{"version":1,"specPaths":["./src/specs/v1"]}]},"license":"MIT","private":false,"scripts":{"codegen-lib":"react-native codegen-harmony --cpp-output-path ./harmony/ultimate_config/src/main/cpp/generated --ets-output-path ./harmony/ultimate_config/src/main/ets/generated"},"version":"6.0.2","_npmUser":{"name":"luyizouyuan","email":"189605613@qq.com"},"homepage":"https://gitcode.com/rn_ohos_plugin/react_native_ultimate_config","keywords":["react-native","harmony","harmonyos","react-native-ultimate-config"],"_resolved":"D:\\code\\rn\\npm\\batch\\react_native_ultimate_config\\bingtang-rn-react-native-ultimate-config-6.0.2.tgz","_integrity":"sha512-ZGpqEkcYrkXk/sK934lrnVsd3ft8ayk3oZd30GUs5zKeyEwUYHWCtDbOpX/6owS0Z2hR5zAZD86h89p8+TxjXw==","repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_ultimate_config","type":"git"},"_npmVersion":"11.12.1","description":"适配鸿蒙版本，提供react_native_ultimate_config组件。","directories":{},"maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"_nodeVersion":"24.15.0","react-native":"index.js","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.3","metro":"^0.81.0","react":"18.2.0","typescript":"5.0.4","@types/react":"18.2.79","react-native":"0.72.5","@react-native/typescript-config":"0.79.5","@react-native-oh/react-native-harmony-cli":"^0.77.50"},"peerDependencies":{"react-native":">=0.72"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-ultimate-config_6.0.2_1790569691475_0.8263570933217628"}}},"time":{"created":"2026-07-30T12:44:19.130Z","modified":"2026-09-28T04:28:11.733Z","6.0.1":"2026-07-30T12:44:22.061Z","6.0.2":"2026-09-28T04:28:11.551Z"},"license":"MIT","homepage":"https://gitcode.com/rn_ohos_plugin/react_native_ultimate_config","keywords":["react-native","harmony","harmonyos","react-native-ultimate-config"],"repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_ultimate_config","type":"git"},"description":"适配鸿蒙版本，提供react_native_ultimate_config组件。","maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"readme":"# @bingtang-rn/react-native-ultimate-config for HarmonyOS\r\n\r\n本项目基于 [react-native-ultimate-config](https://github.com/maxkomarychev/react-native-ultimate-config) 开发，为 React Native 鸿蒙（OpenHarmony）适配版本。如果在使用过程中有任何问题，可以在GitCode提Issue，会及时跟进。issue地址：[issues](https://gitcode.com/rn_ohos_plugin/react_native_ultimate_config/issues)。\r\n\r\n## 版本对应关系\r\n\r\n| 鸿蒙适配包版本 | 原始库版本 | 支持 RN 版本 | Autolink | 编译 API 版本 |\r\n| ------------ | ---------- | ------------ | -------- | ------------- |\r\n| 见发布记录 | 6.0.1 | 0.72+ | 是 | API17+ |\r\n\r\n## 安装\r\n\r\n```bash\r\nnpm install @bingtang-rn/react-native-ultimate-config\r\n```\r\n\r\n## 使用\r\n\r\n```tsx\r\nimport Config from 'react-native-ultimate-config';\r\n\r\n// 读取构建期注入的配置值（string / number / boolean，类型由 env 文件决定）\r\nconst appName: string = Config.APP_NAME;\r\nconst timeout: number = Config.API_TIMEOUT;\r\nconst enableFeature: boolean = Config.ENABLE_FEATURE;\r\n\r\n// per-platform 值：YAML 中按 ios/android/web/harmony 声明，Platform.select 自动选分支\r\nconst greeting: string = Config.PLATFORM_GREETING;\r\n```\r\n\r\n> import 时使用原库名 `'react-native-ultimate-config'`，鸿蒙包由 RNOH alias 自动映射到 `@bingtang-rn/react-native-ultimate-config`。\r\n\r\n**平台差异**：\r\n- HarmonyOS 通过 TurboModule `UltimateConfig.getConstants()` 在运行时返回构建期生成的 `ConfigValues.ets` 中嵌入的常量字典，替代 Android BuildConfig 反射与 iOS `#define` 宏注入。\r\n- 构建期注入机制：hvigor 无 Gradle 插件 / xcconfig 等价物，配置值改为 CLI 直接生成 ArkTS 源码（`ConfigValues.ets`），TurboModule 导入并返回，行为与 iOS/Android 对等。\r\n\r\n**权限要求**：\r\n- 无。本库与 Example 全程不涉及任何 HarmonyOS 运行时权限（不读文件、不联网、不访问硬件）。\r\n\r\n## Link\r\n\r\n| 版本 | 是否支持 Autolink |\r\n|------|------------------|\r\n| 当前版本 | 是 |\r\n\r\n如使用版本支持 Autolink 且工程已接入，可跳过手动配置。\r\n\r\n<details>\r\n<summary>Manual Link 配置</summary>\r\n\r\n> **说明**：本模块需要同时在 C++ 侧和 ETS 侧注册 Package。\r\n\r\n### 1. Overrides RN SDK\r\n\r\n在工程根目录 `oh-package.json5` 添加：\r\n\r\n```json\r\n{\r\n  \"overrides\": {\r\n    \"@rnoh/react-native-openharmony\": \"./react_native_openharmony\"\r\n  }\r\n}\r\n```\r\n\r\n### 2. 引入原生端依赖\r\n\r\n打开 `entry/oh-package.json5`，添加：\r\n\r\n```json\r\n\"dependencies\": {\r\n  \"@bingtang-rn/react-native-ultimate-config\": \"file:../../node_modules/@bingtang-rn/react-native-ultimate-config/harmony/ultimate_config.har\"\r\n}\r\n```\r\n\r\n执行 `ohpm install`。\r\n\r\n### 3. 配置 CMakeLists\r\n\r\n打开 `entry/src/main/cpp/CMakeLists.txt`，添加：\r\n\r\n```cmake\r\nset(OH_MODULES \"${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules\")\r\n\r\nadd_subdirectory(\"${OH_MODULES}/@bingtang-rn/react-native-ultimate-config/src/main/cpp\" ./ultimate_config)\r\n\r\ntarget_link_libraries(rnoh_app PUBLIC ultimate_config)\r\n```\r\n\r\n### 4. 注册 Package（C++ 侧）\r\n\r\n打开 `entry/src/main/cpp/PackageProvider.cpp`，添加：\r\n\r\n```cpp\r\n#include \"UltimateConfigPackage.h\"\r\n\r\nstd::vector<std::shared_ptr<Package>> PackageProvider::getPackages(Package::Context ctx) {\r\n    return {\r\n        std::make_shared<UltimateConfigPackage>(ctx),\r\n    };\r\n}\r\n```\r\n\r\n### 5. 注册 Package（ETS 侧）\r\n\r\n打开 `entry/src/main/ets/RNPackagesFactory.ets`，添加：\r\n\r\n```typescript\r\nimport { UltimateConfigPackage } from '@bingtang-rn/react-native-ultimate-config/ts';\r\n\r\nexport function createRNPackages(ctx: RNPackageContext): RNPackage[] {\r\n  return [\r\n    new UltimateConfigPackage(ctx),\r\n  ];\r\n}\r\n```\r\n\r\n</details>\r\n\r\n## 属性 / API\r\n\r\n| API | 描述 | 参数 | 返回值 | HarmonyOS 支持 |\r\n|-----|------|------|--------|----------------|\r\n| `Config`（default export） | 读取构建期注入的全部配置值 | 无 | object（键值由 env 文件决定） | ✅ 完全支持 |\r\n| `Config.KEY` | 读取单个配置值 | 无 | string \\| number \\| boolean | ✅ 完全支持 |\r\n| per-platform 值 | YAML 中按平台声明 `{key: {ios, android, web, harmony}}` | 无 | 当前平台分支值 | ✅ 完全支持 |\r\n| `rnuc` CLI | 读取 dotenv/YAML，渲染各平台配置源码 | `<env file>` | 生成的源码文件 | ✅ 完全支持 |\r\n| `UltimateConfig.getConstants()` | TurboModule 返回配置字典 | 无 | Object（实际 `Record<string, string\\|number\\|boolean>`） | ✅ 完全支持 |\r\n| override.js（`Platform.select`） | JS 层 per-platform getter | 无 | 当前平台值 | ✅ 完全支持 |\r\n\r\n### 平台差异\r\n- HarmonyOS 用 TurboModule `getConstants()` 替代旧架构 `NativeModules`：JS 入口 `index.js` 在 `Platform.OS === 'harmony'` 分支调用 `TurboModuleRegistry.get('UltimateConfig').getConstants()` 取常量字典。\r\n- 构建期注入：Android 走 Gradle `rnuc.gradle` 注入 BuildConfig/resValue/manifest placeholder；iOS 走 xcconfig + `ConfigValues.h` `#define` 宏；HarmonyOS 无等价机制，改为 CLI 直接生成 `ConfigValues.ets` ArkTS 源码（TurboModule 导入并返回），行为对等。\r\n\r\n### 未实现功能\r\n无。所有公开能力（JS 常量访问、per-platform 值、CLI 配置注入、override 机制、RC 钩子）均已完整实现。\r\n\r\n### 使用限制\r\n- TurboModule Spec 返回类型为 `Object`（codegen-harmony 拒绝 `Record<K,V>`），JS 侧 spread 后按属性访问，运行时行为正确，仅 IDE 静态类型提示略宽。\r\n- `ConfigValues.ets` 由 CLI 生成，修改 env 文件后需重跑 `rnuc` 重新生成后再构建 HAR/HAP。\r\n\r\n## 快速验证（运行 Example）\r\n\r\n### 前置条件\r\n\r\n| 依赖 | 版本要求 |\r\n|------|----------|\r\n| Node.js | >= 18 |\r\n| DevEco Studio | 5.0+ / 6.0+ |\r\n| HarmonyOS SDK | API 17+ |\r\n\r\n### 运行步骤\r\n\r\n**1. 克隆仓库**\r\n\r\n```bash\r\ngit clone <仓库地址>\r\ncd <仓库目录>\r\n```\r\n\r\n**2. 安装依赖并构建**\r\n\r\n```bash\r\nnpm install --legacy-peer-deps\r\nnpm pack           # 生成 tgz 包（会自动触发 prepare 构建 JS 产物）\r\n```\r\n\r\n**3. 进入 example 目录，安装依赖**\r\n\r\n```bash\r\ncd example\r\nnpm install --legacy-peer-deps\r\n```\r\n\r\n**4. 生成 JS Bundle**\r\n\r\n```bash\r\nnpm run dev\r\n```\r\n\r\n产物：`harmony/entry/src/main/resources/rawfile/bundle.harmony.js`\r\n\r\n**5. 用 DevEco Studio 打开鸿蒙工程**\r\n\r\n- 打开 DevEco Studio\r\n- 选择 `example/harmony` 目录\r\n- 等待 Sync 完成\r\n\r\n**6. 编译并运行 HAP**\r\n\r\n在 DevEco Studio 中点击运行按钮，将 HAP 安装到设备/模拟器。\r\n\r\n> **注意**：Example 中已预置插件依赖和 Package 注册，无需手动配置 Link。\r\n\r\n## 约束与限制\r\n\r\n### 兼容性\r\n\r\n- RNOH: 0.72+\r\n- HarmonyOS SDK: API 17+\r\n- DevEco Studio: 5.0+\r\n\r\n## 遗留问题\r\n\r\n无。所有公开能力（JS 常量访问、per-platform 值、CLI 配置注入、override 机制、RC 钩子）均已完整实现，HAR/HAP 构建通过。\r\n\r\n## 开源协议\r\n\r\n本项目基于 [MIT](https://github.com/maxkomarychev/react-native-ultimate-config/blob/master/LICENSE) 协议，详见 [LICENSE](./LICENSE) 文件。\r\n","readmeFilename":"README.md"}