跳到主要内容
Tennantite
EN
文档目录

Registry

shadcn registry 端点与全量索引的生成方式。

registry 是什么

Registry 是 shadcn 的源码分发格式。本项目产出两类文件:

  1. 可安装端点 https://tennantite.rikka.cc/r/<name>.json:每个核心组件一个文件,内联全部源码 content 与 target,shadcn CLI 可直接消费。
  2. 全量索引 registry/registry.json:覆盖 @tennantite/ui 与全部 mod 包组件(311 个条目),供目录与文档引用;mod 包条目仍只有 path,不参与 CLI 拷贝。

生成

pnpm registry
# 等价于
node registry/build.mjs

覆盖范围

可安装端点覆盖 @tennantite/ui 内 5 组组件(primitives、containers、screens/containers、screens/hud、screens/menus)共 63 个组件条目,外加 tennantite-base 与 4 个共享条目:

  • tennantite-base:仅声明 @tennantite/tokens 与 @tennantite/textures 两个 npm 依赖,并落下一个记录资产 CSS 引入方式的 base.css;首次 add 任一组件时 CLI 会一并安装。
  • tennantite-utils:cn 与 gui 共享工具,落在 components/tennantite/lib/tennantite-utils.ts,不覆盖消费者的 @/lib/utils。
  • screen-types:ScreenSlot、padSlots 等 screen 共享类型。
  • screen-parts / screen-slot:容器界面共享的槽位与部件组件。

mod 包(mekanism、ic2、ae2 等)不在 CLI 拷贝范围内:它们大量通过 @tennantite/ui barrel 导入,拷贝改写成本不成比例,保持 pnpm add @tennantite/<mod> 的 npm 安装模式。

消费方式

方式一:components.json 配置 namespace registry 后按名安装:

{
  "registries": {
    "@tennantite": "https://tennantite.rikka.cc/r/{name}.json"
  }
}
npx shadcn add @tennantite/button

方式二:直接 URL,无需配置:

npx shadcn add https://tennantite.rikka.cc/r/button.json

item 结构

每个条目内联源码,CLI 无需再解析仓库路径:

{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "card",
  "type": "registry:component",
  "dependencies": ["cn"],
  "registryDependencies": ["@tennantite/tennantite-base", "@tennantite/panel", "@tennantite/title-bar"],
  "files": [
    {
      "content": "import { Panel } from \"@/components/tennantite/panel\";\n// …",
      "target": "components/tennantite/card/index.tsx",
      "type": "registry:component"
    }
  ]
}

导入改写规则

生成器对每个内联文件按以下规则改写导入(改写失败会直接报错,不产出坏条目):

  • 相对导入解析后落在组件自身目录内(./types、./styles)→ 保持不变。
  • 指向其他组件目录(如 ../panel/index)→ 改写为 @/components/tennantite/panel,并写入 registryDependencies。
  • 指向 lib/utils.ts、screen 共享类型 → 改写为 @/components/tennantite/lib/tennantite-utils、@/components/tennantite/lib/screen-types。
  • @tennantite/textures 保留不改写,追加进该条目的 npm dependencies。

registryDependencies 中的每个条目都会自动追加 @tennantite/tennantite-base,保证 L0 资产包(tokens/textures)随首次安装到位;跨 item 依赖必须写全 namespace(@tennantite/<name>),否则 CLI 会到官方 registry 解析。