10 篇文章带有标签 “react”

图标工具开发最佳实践与经验总结

项目:icon-tool/(Next.js 16 + React 19 + Tailwind v4) 面向设计师的公开图标工具:浏览 + 检索 + 一键导出(SVG / Sprite / 多尺寸 PNG)

一、项目背景与目标

一个给设计师用的图标工具,要解决的核心痛点是:跨库统一搜索 + 一键导出多格式。首版定位为「游客可用的公开原型」——聚合精选开源库、强搜索、一键导出,账号/云端与 AI 生成推迟到后续阶段。

首版交付范围(Phase 0–3):

  • 内置 Lucide、Tabler、Phosphor 三库共 10134 个图标(构建时抽成 public/icons.json,约 7MB)
  • 关键词搜索 + 按图标集 / 风格筛选(客户端)
  • 悬停快操作、多选、批量导出 SVG 压缩包与 SVG Sprite
  • 图标详情页 + 多尺寸 PNG 导出与复制
  • 上传 SVG、收藏(均存 localStorage

二、开发过程时间线

timeline
    title 图标工具开发时间线
    需求沟通 : 4 轮结构化提问收敛方向<br/>核心=浏览+检索+导出,技术栈/库/视觉/范围敲定
    Phase 0-1 : 脚手架 + 三库索引脚本<br/>10134 图标入仓,网格渲染 + 悬停快操作
    Phase 2-3 : 客户端搜索筛选 + 上传 + 多选批量导出
    设计升级 : 用 /前端开发 技能重做 UI<br/>暖中性画廊色 + 玻璃态 + Framer Motion
    体验迭代 : 放大图标 + 操作条移底 + 详情页 + 多尺寸 PNG
    沉淀 : 流程固化为 icon-library-bundler 技能 + 本文档

三、系统架构

graph TB
    subgraph 构建时["构建时 (CI / npm run build:icons)"]
        L["lucide-static"]
        T["@tabler/icons (outline)"]
        P["@phosphor-icons/core<br/>(regular + duotone)"]
        S["scripts/build-icons.mjs<br/>读 SVG→压缩→分类 style→索引"]
        L --> S
        T --> S
        P --> S
        S --> JSON[("public/icons.json<br/>10134 图标 · 7MB")]
    end

    subgraph 运行时["运行时 (Next.js App Router · 纯客户端)"]
        PG["app/page.tsx<br/>状态编排"]
        TB["TopBar<br/>批量操作条"]
        SB["Sidebar<br/>搜索/筛选/上传"]
        IG["IconGrid<br/>网格+骨架+空态"]
        IC["IconCard<br/>图标卡+底部操作条"]
        DP["app/icon/page.tsx<br/>详情页"]
        LD["lib/iconData.ts<br/>loadIcons / findIconById (缓存)"]
        EX["lib/export.ts<br/>SVG / Sprite / PNG"]
        LS[("localStorage<br/>收藏 / 上传")]
    end

    JSON -. "fetch 一次" .-> LD
    LD --> PG
    PG --> TB
    PG --> SB
    PG --> IG
    IG --> IC
    IC -. "双击 / 打开详情" .-> DP
    DP --> EX
    TB --> EX
    PG <--> LS

    style JSON fill:#faf9f5,stroke:#d97757,color:#141413
    style LS fill:#faf9f5,stroke:#a8a29e,color:#141413

关键架构决策:索引前置 + 纯客户端。

三库的 SVG 在构建时被抽成一份统一 JSON,前端加载后做客户端搜索与渲染,无需后端查询、无数据库、可静态部署。几千~上万个图标的规模下,fetch 一次 JSON + 内存过滤足够快。

四、关键技术流程

4.1 图标索引构建

flowchart LR
    A[扫描 node_modules<br/>各库 SVG 目录] --> B[读取每个 .svg 文本]
    B --> C[SVG 压缩<br/>去注释/多余空格/统一 currentColor]
    C --> D[归类 style<br/>line / filled / duotone]
    D --> E[组装统一记录<br/>id, set, name, style, tags, license, svg]
    E --> F[写入 public/icons.json]

统一记录结构(lib/types.ts):

Next AI Draw.io 架构设计分析

1. 项目概述

Next AI Draw.io 是一个 AI 驱动的图表创建工具,通过自然语言命令和 AI 辅助可视化来创建、修改和增强 draw.io 图表。

核心特性

  • LLM 驱动的图表创建:利用大语言模型通过自然语言直接创建和操作 draw.io 图表
  • 基于图像的图表复制:上传现有图表或图像,让 AI 自动复制和增强
  • PDF 和文本文件上传:上传 PDF 文档和文本文件以提取内容并生成图表
  • AI 推理显示:查看支持模型的 AI 思考过程(OpenAI o1/o3、Gemini、Claude 等)
  • 图表历史记录:全面的版本控制,跟踪所有更改
  • 交互式聊天界面:与 AI 实时交流以完善图表
  • 云架构图表支持:专门支持生成云架构图表(AWS、GCP、Azure)
  • 动画连接器:创建动态和动画化的图表元素连接器

技术栈

  • 框架:Next.js 16.x + React 19.x
  • AI SDK:Vercel AI SDK (ai + @ai-sdk/*)
  • 图表渲染:react-drawio
  • 样式:Tailwind CSS 4.x
  • UI 组件:Radix UI + shadcn/ui
  • 多语言支持:i18n
  • 桌面应用:Electron
  • 部署:Vercel / Cloudflare Workers / EdgeOne Pages

2. 整体架构

graph TB
    User[用户] --> Browser[浏览器 / 桌面应用]
    
    Browser --> UI[React 前端 UI]
    UI --> Chat[聊天界面]
    UI --> DrawIO[Draw.io 编辑器]
    UI --> Settings[设置面板]
    
    Chat --> API[Next.js API Routes]
    Settings --> API
    
    API --> ChatAPI[api/chat<br/>核心对话接口]
    API --> ConfigAPI[api/config<br/>配置接口]
    API --> ValidateAPI[api/validate-diagram<br/>图表验证]
    API --> ValidateModelAPI[api/validate-model<br/>模型验证]
    API --> LogAPI[api/log-*<br/>日志反馈]
    API --> ParseURLAPI[api/parse-url<br/>URL 解析]
    API --> ServerModelsAPI[api/server-models<br/>服务端模型]
    
    ChatAPI --> AIProviders[AI 提供商层<br/>lib/ai-providers.ts]
    ChatAPI --> SystemPrompts[系统提示词<br/>lib/system-prompts.ts]
    ChatAPI --> Cache[响应缓存<br/>lib/cached-responses.ts]
    ChatAPI --> Quota[配额管理<br/>lib/dynamo-quota-manager.ts]
    ChatAPI --> Langfuse[Langfuse 追踪<br/>lib/langfuse.ts]
    
    AIProviders --> VercelAI[Vercel AI SDK]
    VercelAI --> OpenAI[OpenAI]
    VercelAI --> Anthropic[Anthropic]
    VercelAI --> Google[Google AI]
    VercelAI --> Bedrock[AWS Bedrock]
    VercelAI --> DeepSeek[DeepSeek]
    VercelAI --> Others[其他 10+ 提供商]
    
    UI --> LocalStorage[本地存储<br/>IndexedDB]
    UI --> SessionStorage[会话存储<br/>lib/session-storage.ts]
    
    style AIProviders fill:#90EE90
    style SystemPrompts fill:#FFD700
    style VercelAI fill:#87CEEB

3. 项目结构

Vercel AI SDK 架构设计分析

1. 项目概述

Vercel AI SDK 是一个与提供商无关的 TypeScript 工具包,旨在帮助开发者使用流行的 UI 框架(如 Next.js、React、Svelte、Vue、Angular)和运行时(如 Node.js)构建 AI 驱动的应用程序和智能体。

核心特性

  • 统一提供商架构:支持 OpenAI、Anthropic、Google 等多个模型提供商
  • 多框架支持:React、Svelte、Vue、Angular
  • 多种模型类型:文本生成、嵌入、图像、语音、转录、重排等
  • 智能体框架:ToolLoopAgent 等工具循环代理
  • 流式输出:支持实时流式响应

2. 整体架构

graph TB
    User[用户应用] --> UI[UI 框架集成<br/>React/Svelte/Vue/Angular]
    User --> Core[核心 AI 函数<br/>generateText/streamText]
    
    UI --> Core
    
    Core --> ModelInterface[模型接口层<br/>LanguageModelV4/EmbeddingModelV4]
    Core --> Agent[智能体层<br/>ToolLoopAgent]
    
    ModelInterface --> Providers[提供商实现层]
    Agent --> Providers
    
    Providers --> OpenAI[OpenAI]
    Providers --> Anthropic[Anthropic]
    Providers --> Google[Google]
    Providers --> Others[其他 50+ 提供商]
    
    OpenAI --> APIGateway[Vercel AI Gateway<br/>统一 API 入口]
    Anthropic --> APIGateway
    Google --> APIGateway

3. 项目结构

Monorepo 结构

Cline 概览 - Cline 扩展架构和开发指南

Cline 扩展架构和开发指南

项目概述

Cline 是一个 VSCode 扩展,通过核心扩展后端和基于 React 的 webview 前端的组合提供 AI 辅助功能。该扩展使用 TypeScript 构建,遵循模块化架构模式。

架构概述

定义

  • 核心扩展:src 文件夹内的所有内容,按模块化组件组织
  • 核心扩展状态:由 index.ts 中的 Controller 类管理,作为扩展状态的唯一真实来源。它管理多种类型的持久存储(全局状态、工作区状态和密钥),处理状态在核心扩展和 webview 组件之间的分发,并协调多个扩展实例之间的状态。这包括管理 API 配置、任务历史、设置和 MCP 配置。
  • Webview:webview-ui 内的所有内容。所有用户可见的 react 或视图以及用户交互组件
  • Webview 状态:由 ExtensionStateContext.tsx 中的 ExtensionStateContext 管理,通过上下文提供者模式为 React 组件提供对扩展状态的访问。它维护 UI 组件的本地状态,通过消息事件处理实时更新,管理部分消息更新,并提供状态修改方法。上下文包括扩展版本、消息、任务历史、主题、API 配置、MCP 服务器、市场目录和工作区文件路径。它通过 VSCode 的消息传递系统与核心扩展同步,并通过自定义钩子(useExtensionState)提供类型安全的状态访问。

Cline Documentation

Cline 文档目录

欢迎阅读 Cline 文档 - 这是一份全面的指南,帮助您使用和扩展 Cline 的功能。在这里,您可以找到帮助您入门、提升技能和为项目做出贡献的资源。

入门指南

  • 编程新手? 我们为您准备了温和的入门指南:
    • 编程新手入门指南

提升提示工程技能

  • 想要更有效地与 Cline 沟通? 请探索:
    • 提示工程指南
    • Cline 记忆库

探索 Cline 的工具

为 Cline 做贡献

  • 有兴趣做出贡献? 我们欢迎您的参与:
    • 欢迎提交拉取请求
    • 贡献指南

其他资源

我们一直在努力改进这份文档。如果您有建议或发现需要改进的地方,请告诉我们。您的反馈有助于让 Cline 变得更好。

Cline 入门指南 | 新手程序员

欢迎使用 Cline!本指南将帮助你完成设置并开始使用 Cline 构建你的第一个项目。

你需要准备的东西

在开始之前,请确保你具备以下条件:

  • VS Code: 一个免费且功能强大的代码编辑器。
  • 开发工具: 基础的编程软件(Homebrew、Node.js、Git 等)。
    • 在完成这里的设置后,请参考我们的安装基本开发工具指南,通过 Cline 的帮助来完成这些设置
    • Cline 将指导你安装所需的一切
  • Cline 项目文件夹: 一个专门存放所有 Cline 项目的文件夹。
    • macOS:在你的文档文件夹中创建一个名为 "Cline" 的文件夹
      • 路径:/Users/[你的用户名]/Documents/Cline
    • Windows:在你的文档文件夹中创建一个名为 "Cline" 的文件夹
      • 路径:C:\Users\[你的用户名]\Documents\Cline
    • 在这个 Cline 文件夹内,为每个项目创建单独的文件夹
      • 示例:Documents/Cline/workout-app 用于健身追踪应用
      • 示例:Documents/Cline/portfolio-website 用于个人作品集
  • VS Code 中的 Cline 扩展: 在 VS Code 中安装 Cline 扩展。

智能编码新范式 (Cline + DeepSeek) × MCP

  • 提示词:使用 React 技术实现 Tic Tac Toe 游戏

  • 运行游戏

  • 创建新仓库

  • 快速设置仓库

  • 退出游戏

  • 查看已安装的 MCP 服务器

  • 创建新问题(issue)

  • 查看 wang-junjian/tictactoe 项目中分配给我 issue,使用 GitHub MCP 服务器的工具 list_issues

  • 当前仓库 wang-junjian/tictactoe 中有1个开放的 issue

  • 分步实现 issue #1 玩家获胜时添加烟花效果

  • 实现 issue #1 玩家获胜时添加烟花效果

  • 运行游戏 - 获胜后的烟花效果

  • 创建新问题 - Refactoring

  • 创建分支 git switch -c Refactoring,对项目中的代码进行重构

  • 完成代码重构

  • 推送到远程仓库,git push -u origin Refactoring

  • Compare & pull request

  • 创建拉取请求(pull request),关联问题(issue #2)

  • wang-junjian/tictactoe 项目中分配给我的 PR,使用 GitHub MCP 服务器的工具 get_pull_request

  • 使用 GitHub MCP 服务器的工具 get_pull_request_files 获取 PR 的变更文件列表

  • 完成 PR #3 的代码评审

  • 使用 GitHub MCP 服务器的工具 add_issue_comment,提交代码评审