# 日月依赖拆分与打包体积

系数按天体存放；`planet-series.js` 只作为离线工具与测试的聚合导出。
`earth-model.js` 独立于通用行星目录，日月状态通过 `sun-moon-ephemeris.js`
提供。日月与通用视位置入口复用 `apparent-core.js`，通过显式求值器参数连接，
不使用全局注册表或异步加载，不复制天文算法和系数。

公共 API 保持兼容，并新增 `js-ephemeris-lite/sun-moon` 子入口。
气朔、太阳时、恒星位置的静态依赖图不包含其他行星系数。
小行星系数位于可选的 `asteroid-ephemeris-lite` 工作区包中，不包含在
`js-ephemeris-lite` 的 npm 包内；未安装可选包的项目不会下载或解析这部分数据。
通用行星／观测 API 仍需要完整行星模型；部分日月业务（如地方食可见性）
仍复用通用观测模块，不保证原生 ESM 下的全部日月业务均只加载日月数据。

## 实测

与拆分前 `e7f6159` 比较。esbuild 0.27.7，browser / ESM / bundle / minify，
保留每个入口的全部导出，再使用 Node.js 默认 gzip。以下是十进制 kB，
不是 npm tarball 大小，也不是网站部署后的网络实测。

| 入口 | 拆分前 gzip kB | 拆分后 gzip kB |
| --- | ---: | ---: |
| 气朔 `src/qi-shuo.js` | 351.4 | 119.8 |
| 太阳时 `src/solar-time.js` | 227.3 | 35.1 |
| 完整星历 `src/ephemeris.js` | 330.3 | 331.6 |
| 八字 `packages/bazi/dist/index.js` | 367.2 | 135.3 |
| 紫微 `packages/ziwei/dist/index.js` | 386.8 | 154.9 |

完整模型没有减项，所以完整星历体积基本不变；gzip 会受模块输出排列影响。
主入口在原生 ESM 下仍会加载其全部静态依赖；需要控制加载范围时使用功能
子入口。npm 包仍包含全部系数，不会因为拆文件而减少安装体积。

复测前先构建工作区，再运行：

```sh
npm run build:workspaces
node tools/measure-feature-bundles.mjs /path/to/esbuild/lib/main.js
```

若本地已安装 esbuild，可省略路径参数。工具只向标准输出报告体积与输入模块，
不改动发布文件。不同打包器、版本、导入范围和压缩设置可能得到不同结果。

## 数值验证

拆分前后全部系数导出深比较相等，原完整星历导出名不变。
在覆盖约 -6000～10000 年的 33 个历元、三档精度下，对九颗行星和五种
日月状态／方向接口进行了 1,386 次比较，结果逐值相等。
回归测试还比较日月专用与通用视位置入口在三种参考系、三档精度下的输出，
并限制日月／历法入口的静态依赖，防止后续意外引回其他行星模型。
