fix: hoist MLRN peer dependency in particle package
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled

This commit is contained in:
OpenAI Codex
2026-09-09 13:48:54 +08:00
parent afc29e13fa
commit fa431ba6fd
6 changed files with 28 additions and 12 deletions

View File

@@ -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。

View File

@@ -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、完成报告和开发记录。

View File

@@ -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。
## 未执行的人工验证与命令

View File

@@ -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 长路径。

View File

@@ -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` 做发布包验证。

View File

@@ -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"
}
}