指南

仓库与本地开发

仓库目录结构、三份真源与本地开发命令

目录结构

vue3-okr-tree/
├─ src/lib/okr-tree/         # 库本体
│  ├─ OkrTree.vue            # 容器:props / defineExpose / 配置同步 / 键盘导航
│  ├─ OkrTreeNode.vue        # 递归节点:渲染、交互、ARIA
│  ├─ OkrTreeGroup.vue       # 多树根对齐
│  ├─ OkrTreeViewport.vue    # 画布缩放平移与导出
│  ├─ model/                 # 框架无关的树模型(TreeStore / TreeNode / util / transition.css)
│  ├─ style.css              # 组件样式(全部限定在 .org-chart-container 内)
│  ├─ viewport.ts            # clampZoom / computeFit / renderToDataUrl 等纯函数
│  └─ context.ts / node-content.ts / use-reduced-motion.ts
├─ shared/api.ts             # API 表单一来源
├─ playground/               # 可交互 Demo 站(24 个用例,文档站内嵌同一批组件)
├─ docs-site/          # 文档站(本页,Docus/Nuxt layer)
├─ tests/                    # Vitest 单测 + Playwright 视觉回归 + SSR 冒烟
├─ scripts/                  # gen-readme-api / post-build / verify-dist / benchmark 等
└─ docs/                     # requirements / roadmap / release-guide / acceptance(仓库内文档,不发布)

关键设计:三份真源

真源位置谁在消费
API 表shared/api.ts文档站 <ApiDoc>、Playground API 页、README 的分组概览(pnpm gen:readme 生成);表与 defineExpose 由 tests/api-surface.spec.ts 断言不漂移
样式src/lib/okr-tree/style.css + model/transition.css库产物 dist/style.css(单文件);连接线的几何取值多处相互咬合,改任何一项都可能产生亚像素漂移,所以外观定制走 --okr-* 变量而不是改样式
DOM 类名与结构组件模板里的 org-chart-* 类名OkrTreeGroup 的测量选择器(OkrTreeGroup.vue:53-54)、getVisibleNodes 的可见性判定、视觉回归基线都按类名查询,因此 DOM 结构是对外契约的一部分

常用命令

>_ Terminal
pnpm install
pnpm dev              # Demo 站(引用 src 源码)
pnpm test             # Vitest 单测
pnpm typecheck        # vue-tsc
pnpm lint             # ESLint
pnpm build            # 库构建 → dist/
pnpm verify:dist      # 用 dist 产物做挂载冒烟
pnpm verify:package   # publint + attw 包发布体检
pnpm size             # size-limit 体积预算
pnpm test:visual      # Playwright 视觉回归 + 浏览器性能基线
pnpm docs:dev         # 文档站(本页)
pnpm gen:readme       # 从 shared/api.ts 重新生成 README 的 API 概览

改了 shared/api.ts 或 src/ 的 defineExpose 之后要跑 pnpm gen:readme——README 的 API 段是生成物,不手改(仓库根 AGENTS.md 记了这条约定)。

发布

更新 package.json 的 version 与 CHANGELOG.md → 提交 → git tag v1.x.x && git push origin v1.x.x,release.yml 跑完门禁后 npm publish --provenance 并创建 GitHub Release。完整步骤与前置配置见仓库 docs/release-guide.md。版本号自 1.13.0 起与姊妹包 react-okr-tree 锁步发布。

Copyright © 2026