Shared
跨端共享包总览
packages/shared、hooks、primitives —— 跨端可复用的纯类型 / 跨端 hooks / 表单 primitive
定位
packages/shared、packages/hooks、packages/primitives 三个目录都属于「跨端共享层」——它们要么是零依赖的纯数据/类型,要么是 React 跨端的 hooks 与 primitive,可同时服务 Web / React Native / 小程序。
详细的准入标准见 命名规范 · shared 准入规则。
包列表
| 目录 | 包名 | 形态 | 跨端 |
|---|---|---|---|
shared/ui-tokens | @skyroc/ui-tokens | 纯 TS 常量 | Web / RN / MiniApp |
shared/ui-types | @skyroc/ui-types | 纯类型 | Web / RN / MiniApp |
hooks | @skyroc/hooks | React hooks(含 ./web 子入口) | RN 安全 + Web 增强 |
primitives/filed-form | @skyroc/form | React 表单 primitive | React 通用 |
设计原则
1. shared 必须「零或极轻依赖」
packages/shared/* 不允许引入 React 运行时 / DOM API / RN API / 大型库(antd、tailwindcss 等)。具体见 shared 准入规则。
例如:
- ✅
defaultBrandColors(hex 常量)放@skyroc/ui-tokens - ❌ OKLCH 调色板生成算法(依赖 colord / culori)→ 不能放 shared,要放
@skyroc/color
2. hooks 用平台子入口隔离
@skyroc/hooks 主入口(.)RN 安全,浏览器专用 hooks 放 ./web:
import { useCaptcha } from '@skyroc/hooks'; // ✅ RN / Web 通用
import { useCopy } from '@skyroc/hooks/web'; // ✅ 仅 WebNative 端引用 . 不会误打包 navigator.clipboard 等浏览器 API。
3. primitives 是「能力底座」
@skyroc/form 是典型的 primitive:它定义了一套类型安全的表单状态引擎,但不绑定具体 UI。
@skyroc/web-ui的Form组件基于它实现- 将来 Native UI 库也可以基于同一个 form-core 实现
与 @core 的区别
| 维度 | @core/* | shared/* + hooks + primitives |
|---|---|---|
| 形态 | 运行时基础设施(请求 / 状态 / 日志…) | 纯数据 + 类型 + 跨端 hooks / primitive |
| React 依赖 | 部分(state / service) | 视包而定(form / hooks 需要) |
| 典型例子 | @skyroc/service、@skyroc/axios | @skyroc/ui-tokens、@skyroc/form |
依赖关系
@skyroc/ui-tokens(无依赖)
↑
@skyroc/tailwind-plugin(Web)
@skyroc/ui-types(仅 clsx)
↑
@skyroc/web-ui(Web)
@skyroc/hooks(ahooks)
↑
@skyroc/web-admin-layouts / @skyroc/web-admin-theme / apps/admin
@skyroc/form (@skyroc/type-utils + @skyroc/utils)
↑
@skyroc/web-ui (Form preset)