Acme

欢迎使用 Acme Registry

灵活的组件注册表,支持公开分享和私有保护,专为团队协作设计

欢迎使用 Acme Registry!这是一个功能完善的 shadcn/ui 组件注册表,支持公开和私有两种模式,专为团队协作和企业使用而设计。

什么是组件 Registry?

组件 Registry 允许您:

  • 🔒 可选的访问控制 - 支持公开或私有模式,灵活保护组件
  • 🎨 共享设计系统 - 在团队和项目间复用组件
  • 📦 管理组件库 - 集中管理和版本控制
  • 🚀 加速开发 - 快速安装预构建组件
  • 🌐 支持多注册表 - 同时使用公共和私有源

核心特性

开始使用

我是用户 👤

如果您想使用私有 Registry 中的组件:

我是维护者 🔧

如果您想部署和维护 Registry:

快速开始

公开注册表(最简单)

# 1. 构建注册表
pnpm registry:build

# 2. 启动服务
pnpm dev

# 3. 使用组件(客户端)
npx shadcn@latest add https://your-domain.com/r/button.json

私有注册表(需要认证)

服务端设置:

# 1. 生成令牌
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

# 2. 配置环境变量
echo "REGISTRY_TOKEN=your_token" > .env.local

# 3. 启动服务
pnpm registry:build && pnpm dev

客户端使用:

components.json
{
  "registries": {
    "@acme": {
      "url": "https://your-domain.com/r/{name}.json",
      "headers": {
        "Authorization": "Bearer ${REGISTRY_TOKEN}"
      }
    }
  }
}
.env.local
REGISTRY_TOKEN=your_token
npx shadcn@latest add @acme/button

架构概览

组件 Registry 由以下几部分组成:

认证层 🔒(可选)

  • 灵活配置:支持公开模式或私有模式
  • Middleware:可选的 /r/ 静态文件保护
  • 多种认证:Bearer Token、API Key、查询参数(仅私有模式)

组件存储 📦

  • 源码目录registry/ - 组件源代码
  • 配置文件registry.json - 组件元数据和依赖
  • 生成文件public/r/*.json - 构建后的 JSON(受保护)

文档系统 📚

  • Fumadocs:基于 MDX 的文档系统
  • 自动导航:从文件结构生成导航
  • 搜索功能:全文搜索文档内容

认证方式

公开访问(无需认证)

# 不设置 REGISTRY_TOKEN 环境变量
curl https://your-domain.com/r/button.json

私有访问(需要认证)

设置 REGISTRY_TOKEN 环境变量后,支持以下认证方式:

Bearer Token(推荐)

curl -H "Authorization: Bearer YOUR_TOKEN" \
  https://your-domain.com/r/button.json

API Key

curl -H "X-API-Key: YOUR_TOKEN" \
  https://your-domain.com/r/button.json

查询参数(仅测试)

curl "https://your-domain.com/r/button.json?token=YOUR_TOKEN"

详见认证文档

工作流程

维护者:发布组件

用户:安装组件

安全最佳实践

公开注册表

公开注册表无需特殊安全配置,任何人都可以访问组件。

私有注册表

如果使用私有模式,请遵循以下安全措施

  1. 使用 Middleware - 必须保护 /r/ 静态文件(参见 proxy.ts
  2. 强随机令牌 - 使用至少 32 字节的随机令牌
  3. HTTPS 传输 - 生产环境必须使用 HTTPS
  4. 环境变量 - 不要将令牌提交到版本控制系统
  5. 定期轮换 - 建议每 3-6 个月更新令牌

详见认证文档部署指南

常见用例

开源组件库(公开)

{
  "@mylib": "https://components.mylib.com/r/{name}.json"
}

企业设计系统(私有)

{
  "@design-system": {
    "url": "https://design.company.com/r/{name}.json",
    "headers": {
      "Authorization": "Bearer ${DESIGN_TOKEN}"
    }
  }
}

多团队协作(混合模式)

{
  "@public": "https://public.company.com/r/{name}.json",
  "@frontend": {
    "url": "https://frontend.company.com/r/{name}.json",
    "headers": { "Authorization": "Bearer ${FRONTEND_TOKEN}" }
  },
  "@backend": {
    "url": "https://backend.company.com/r/{name}.json",
    "headers": { "Authorization": "Bearer ${BACKEND_TOKEN}" }
  }
}

混合公共/私有

{
  "@shadcn": "https://ui.shadcn.com/r/{name}.json",
  "@internal": {
    "url": "https://internal.company.com/r/{name}.json",
    "headers": { "Authorization": "Bearer ${TOKEN}" }
  }
}

下一步

新手入门

  1. 入门指南 - 了解基础概念
  2. 认证配置 - 设置私有访问
  3. 客户端配置 - 在项目中使用

深入了解

需要帮助?


准备好了吗? 开始使用 →