From fa431ba6fd1f182b8b77345b50a9d74e225f17d4 Mon Sep 17 00:00:00 2001 From: OpenAI Codex Date: Wed, 9 Sep 2026 13:48:54 +0800 Subject: [PATCH] fix: hoist MLRN peer dependency in particle package --- ...ibre粒子Android发布与ReactNative包设计_v1.md | 2 +- ...P-063_MapLibre粒子Android_v1发布工程化_v1.md | 3 ++- ...粒子Android_v1发布工程化_Codex完成报告_v1.md | 6 ++--- packages/maplibre-particle-rn/CHANGELOG.md | 1 + packages/maplibre-particle-rn/README.md | 2 +- packages/maplibre-particle-rn/package.json | 26 ++++++++++++++----- 6 files changed, 28 insertions(+), 12 deletions(-) diff --git a/docs/30_设计/MapLibre粒子Android发布与ReactNative包设计_v1.md b/docs/30_设计/MapLibre粒子Android发布与ReactNative包设计_v1.md index d1825df0b..e5d485ab6 100644 --- a/docs/30_设计/MapLibre粒子Android发布与ReactNative包设计_v1.md +++ b/docs/30_设计/MapLibre粒子Android发布与ReactNative包设计_v1.md @@ -18,7 +18,7 @@ Consumer cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.1 ``` -正式包 re-export 已有 MLRN `Map`、`Camera` 等公共 API,并包含 WeatherRuntime TurboModule。它不是 MLRN 的完整 fork;`@maplibre/maplibre-react-native` 是正式包的内部依赖,而 Consumer 不应再直接安装第二份 MLRN。package plugin 把 MLRN 唯一的 `org.maplibre.gl:android-sdk-opengl` 请求替换为正式 NavSea AAR,避免官方 AAR 与 Particle AAR 同时进入 APK。 +正式包 re-export 已有 MLRN `Map`、`Camera` 等公共 API,并包含 WeatherRuntime TurboModule。它不是 MLRN 的完整 fork;`@maplibre/maplibre-react-native@11.3.6` 是正式包的 peer dependency;现代 npm 在安装正式包时自动解析到 App 根依赖层。Consumer 不应再直接声明或安装第二份 MLRN。package plugin 把 MLRN 唯一的 `org.maplibre.gl:android-sdk-opengl` 请求替换为正式 NavSea AAR,避免官方 AAR 与 Particle AAR 同时进入 APK。 WeatherColorLayer 与 RasterParticleLayer 是 Core-only style layer,不是 React 组件;包公开 `createParticleWeatherStyle()` 和稳定 IDs 以声明样式。field 仍只经既有 `metadataJson + local file:// payload → WeatherRuntime → RasterArraySource::submitHostField()` 进入 Native/Core;不创建第二套 ingress、Timeline 或 Runtime Window。 diff --git a/docs/50_Step记录/STEP-063_MapLibre粒子Android_v1发布工程化_v1.md b/docs/50_Step记录/STEP-063_MapLibre粒子Android_v1发布工程化_v1.md index 4c5790bc3..5b8e3d890 100644 --- a/docs/50_Step记录/STEP-063_MapLibre粒子Android_v1发布工程化_v1.md +++ b/docs/50_Step记录/STEP-063_MapLibre粒子Android_v1发布工程化_v1.md @@ -14,7 +14,8 @@ - [x] Android publication 配置改为正式 group/artifact/version,保留 OpenGL publication postfix。 - [x] 建立正式 RN facade package,含 JS/TS source、类型、Android bridge、autolinking、Expo plugin、README、CHANGELOG、LICENSE。 - [x] package plugin 将 MLRN 的单一 OpenGL SDK dependency substitution 到正式 NavSea AAR,避免双 Native AAR。 -- [x] 建立只声明正式 npm 包的 Consumer Test Host;不引用源码 package、Native tree 或复制 bridge。 +- [x] 建立只声明正式 npm 包的 Consumer Test Host;不引用源码 package、Native tree 或复制 bridge。MLRN 采用 peer dependency,避免嵌套 native module 与 Windows codegen 长路径。 +- [x] Windows 预发布 Consumer 首次 APK 编译暴露嵌套 MLRN codegen 路径超过 260 字符;已修正式包依赖模型并重新打包,等待新 tarball 重装后复验。 - [x] `npm pack`、tarball 内容审计、package JSON、plugin syntax、package TypeScript check、`git diff --check` 静态验证。 - [x] 设计、Step、完成报告和开发记录。 diff --git a/docs/报告/STEP-063_MapLibre粒子Android_v1发布工程化_Codex完成报告_v1.md b/docs/报告/STEP-063_MapLibre粒子Android_v1发布工程化_Codex完成报告_v1.md index 7e0fbd1c7..0c705799e 100644 --- a/docs/报告/STEP-063_MapLibre粒子Android_v1发布工程化_Codex完成报告_v1.md +++ b/docs/报告/STEP-063_MapLibre粒子Android_v1发布工程化_Codex完成报告_v1.md @@ -10,15 +10,15 @@ ## RN package 与 Consumer -正式 package 保留 Native WeatherRuntime bridge,re-export 当前 MLRN 公共 Map API。当前仓库不是完整 MLRN fork,故 package 将 `@maplibre/maplibre-react-native@11.3.6` 作为内部依赖;Consumer 只直接安装 NavSea package,不应额外直接安装官方 MLRN。package plugin 利用 Gradle dependency substitution,将 MLRN 的唯一 OpenGL SDK 请求替换为正式 NavSea AAR,避免两份 Native AAR。 +正式 package 保留 Native WeatherRuntime bridge,re-export 当前 MLRN 公共 Map API。当前仓库不是完整 MLRN fork,故 package 将 `@maplibre/maplibre-react-native@11.3.6` 作为 peer dependency,并仅以 devDependency 支撑包自身开发;Consumer 只直接安装 NavSea package,npm 将唯一 MLRN 解析到 App 根依赖层,不应额外直接安装第二份官方 MLRN。package plugin 利用 Gradle dependency substitution,将 MLRN 的唯一 OpenGL SDK 请求替换为正式 NavSea AAR,避免两份 Native AAR。 Consumer Host 位于 `integration/react-native/MapLibreParticlePackageConsumerTestHost/`,只声明 `@navsea/maplibre-particle-rn@13.4.1-particle.1`,从其导入 Map、Camera、WeatherRuntime 和 style helper;没有 `file:`、workspace/source-path package dependency,也不复制 bridge 或引用 Native source tree。 ## tarball 与静态验证 -`npm pack` 成功生成 `navsea-maplibre-particle-rn-13.4.1-particle.1.tgz`(8,951 bytes,SHA-1 `2127d7b0e7ce71d0d9e429c92806cd93799c919e`)至 `/tmp/step063-package.*`。tarball 含 package JSON、TS source/types、Android bridge/Gradle、autolinking config、Expo plugin、README、CHANGELOG、LICENSE;不含 node_modules、.git、build cache、APK、Test Host、WeatherV2 assets、logs、无关 docs 或凭证。 +发布前 Consumer 验证修正 MLRN 为 peer dependency 后重新 `npm pack`,生成 `navsea-maplibre-particle-rn-13.4.1-particle.1.tgz`(9,100 bytes,SHA-1 `247e2db901f6588c9e48bc3156a448b97d203d0d`,SHA-256 `31335791a5a6e553a538f84816322e8cd119f16d7c2b15436ce785aa497da6a8`)。旧 tarball 哈希不再有效。tarball 含 package JSON、TS source/types、Android bridge/Gradle、autolinking config、Expo plugin、README、CHANGELOG、LICENSE;不含 node_modules、.git、build cache、APK、Test Host、WeatherV2 assets、logs、无关 docs 或凭证。 -package JSON 和两个 plugin Node syntax 检查 PASS;正式 package TypeScript check PASS(经 build-output-throttle);release manifest/package/Consumer version contract、无 `file:` consumer dependency、正式 build config 无 step061 与 `git diff --check` 均 PASS。Consumer 依赖的是尚未上传 registry 的正式版本,故本轮不执行其 `npm install`;这由后续 tarball 安装人工验证覆盖。没有运行 Jest。 +package JSON 和两个 plugin Node syntax 检查 PASS;正式 package TypeScript check PASS(经 build-output-throttle);release manifest/package/Consumer version contract、无 `file:` consumer dependency、正式 build config 无 step061 与 `git diff --check` 均 PASS。Consumer 预发布验证已实际安装 tarball。首次安装暴露 MLRN 被普通 dependency 嵌套到 `@navsea/.../node_modules/@maplibre/...`,Windows RN codegen 因路径超过 260 字符失败;该问题已通过 peer dependency 修正。修正后需要重新安装新 tarball、clean prebuild 并继续 APK 验证。没有运行 Jest。 ## 未执行的人工验证与命令 diff --git a/packages/maplibre-particle-rn/CHANGELOG.md b/packages/maplibre-particle-rn/CHANGELOG.md index 33cdd8d9f..9323288c2 100644 --- a/packages/maplibre-particle-rn/CHANGELOG.md +++ b/packages/maplibre-particle-rn/CHANGELOG.md @@ -5,3 +5,4 @@ - 基于 MapLibre Native 13.4.1 的 Android OpenGL Particle 发行线。 - 包含 WeatherColor、RasterParticle、HostField binary file ingress、Timeline / Playback 与 React Native WeatherRuntime。 - Native/RN binary ingress 已在 STEP-061 验证;GSI + 真实 WeatherV2 + Particle Android 综合验证已在 STEP-062 完成。 +- 发布前 Consumer 验证修正 MLRN 依赖为 peer dependency,避免嵌套 native module 与 Windows codegen 长路径。 diff --git a/packages/maplibre-particle-rn/README.md b/packages/maplibre-particle-rn/README.md index c88392419..8b04d6c22 100644 --- a/packages/maplibre-particle-rn/README.md +++ b/packages/maplibre-particle-rn/README.md @@ -1,6 +1,6 @@ # @navsea/maplibre-particle-rn -`13.4.1-particle.1` 是 NavSea 维护的 MapLibre Particle React Native 入口。Consumer 只直接安装本包;它以唯一 `@maplibre/maplibre-react-native` native module 提供 `Map`、`Camera` 等 MapLibre RN API,并以 `WeatherRuntime` 提供既有 HostField/Timeline 低频控制。 +`13.4.1-particle.1` 是 NavSea 维护的 MapLibre Particle React Native 入口。Consumer 只直接安装本包;本包将 `@maplibre/maplibre-react-native@11.3.6` 声明为 peer dependency,使 npm 将唯一 MLRN 放在 App 根依赖层,并由其提供 `Map`、`Camera` 等 MapLibre RN API,并以 `WeatherRuntime` 提供既有 HostField/Timeline 低频控制。 Android 使用 `cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.1`。Expo Consumer 应在 app config 加入 `@navsea/maplibre-particle-rn/app.plugin`;plugin 将 MLRN 对 OpenGL SDK 的请求替换为该唯一 NavSea artifact,避免官方与 Particle AAR 同时进入 APK。正式 Android Maven 仓库为 `https://pbf.jpcn.ccwu.cc/maven`;plugin 会自动加入该仓库。npm registry 尚未决定时,可先安装本包的 `.tgz` 做发布包验证。 diff --git a/packages/maplibre-particle-rn/package.json b/packages/maplibre-particle-rn/package.json index 304473f15..29329ce7e 100644 --- a/packages/maplibre-particle-rn/package.json +++ b/packages/maplibre-particle-rn/package.json @@ -15,22 +15,36 @@ "CHANGELOG.md", "LICENSE.md" ], - "keywords": ["navsea", "maplibre", "particle", "react-native", "weather"], - "repository": { "type": "git", "url": "https://git.eyaku.jp/tei/MapLibreParticleLab" }, - "dependencies": { - "@maplibre/maplibre-react-native": "11.3.6" + "keywords": [ + "navsea", + "maplibre", + "particle", + "react-native", + "weather" + ], + "repository": { + "type": "git", + "url": "https://git.eyaku.jp/tei/MapLibreParticleLab" }, "peerDependencies": { + "@maplibre/maplibre-react-native": "11.3.6", "react": ">=19.1.0", "react-native": ">=0.80.0" }, "peerDependenciesMeta": { - "expo": { "optional": true } + "expo": { + "optional": true + } }, "codegenConfig": { "name": "WeatherRuntimeBridgeSpec", "type": "modules", "jsSrcsDir": "src", - "android": { "javaPackageName": "org.navsea.maplibre.particle.weather" } + "android": { + "javaPackageName": "org.navsea.maplibre.particle.weather" + } + }, + "devDependencies": { + "@maplibre/maplibre-react-native": "11.3.6" } }