返回资源中心

Figma → React Component Generator with Storybook Sync

工作流
前端框架
1 次浏览
0 个赞
figmareactstorybook

资源描述

一款面向前端工程师的高效设计-开发协同工作流:通过 Figma 插件导出设计元数据,结合 LLM(如 Claude 或 GPT)自动生成符合最佳实践的 TypeScript + Tailwind React 组件、JSDoc 注释及 Storybook CSF v3 演示文件,并自动同步 Props 文档至 Storybook Canvas 和 Docs tab。适用于设计系统建设、组件库快速迭代与跨职能团队协作。

详细内容

# Figma → React Component Generator with Storybook Sync 工作流指南 ## 工作流概述 本工作流实现从 Figma 设计稿到可维护、可测试、可文档化的 React 组件的端到端自动化生成。核心链路为:Figma 插件提取图层结构与属性 → 本地/云端 LLM 解析语义并生成代码 → 脚本自动注入组件文件、Storybook CSF 文件及 JSDoc → 同步更新 Storybook 的 Props 表与交互式文档。全程无需手动编写 props 接口或 Story 示例,显著降低设计还原偏差与重复劳动。 ## 分步骤操作说明 ### 步骤 1:安装并配置 Figma 插件 - 在 Figma 社区插件市场搜索并安装 `Figma React Exporter`(官方配套插件) - 打开目标设计文件,选中需导出的组件(支持 Frame / Component Set),运行插件 - 设置导出选项:启用 `Include Variants`、`Export Text Styles as Tokens`、`Preserve Layout Hierarchy`,输出格式选择 `JSON (React Schema)` - 点击「Export」生成 `component.json` 并保存至项目 `./design/` 目录 ### 步骤 2:准备本地 LLM 推理环境 - 确保已安装 Node.js ≥18.17 及 Python ≥3.10(用于部分 LLM 本地运行时) - 运行 `npm install -D @figma-react-gen/cli`(或克隆仓库后执行 `pnpm install`) - 配置 `.env`:设置 `LLM_PROVIDER=claude` 或 `LLM_PROVIDER=openai`,并填入对应 API KEY 与 `MODEL_NAME=claude-3-5-sonnet-20240620`(推荐) - 可选:在 `config/generation.config.ts` 中定制组件命名规则、Tailwind 响应式断点映射及禁用默认样式重置 ### 步骤 3:执行组件代码生成 - 在项目根目录运行命令:`npx @figma-react-gen/cli generate --input ./design/component.json --output ./src/components/Button` - CLI 将解析 JSON 中的 `name`、`variants`、`properties`(如 `size`, `variant`, `disabled`)、`textStyles` 和 `constraints`,调用 LLM 生成: - `Button.tsx`(含泛型 Props 接口、useMemo 优化、Tailwind 动态类组装) - `Button.stories.tsx`(CSF v3 格式,含 argsType、play function 及 canvas-only controls) - `Button.types.ts`(导出独立 Props 类型定义) - `Button.md`(Markdown 文档片段,含设计意图说明与使用约束) ### 步骤 4:自动注入 Storybook 并同步 Props 文档 - 运行 `npx @figma-react-gen/cli sync-storybook --component-path ./src/components/Button` - 脚本将: - 更新 `.storybook/preview.ts` 的 `argTypes` 自动注册逻辑(基于 JSDoc `@param` 和 `@default`) - 在 `Button.stories.tsx` 中注入 `docs: { page: () => <ButtonDocs /> }` 并生成 `ButtonDocs.mdx`(含 Props 表、设计规范引用链接、Figma 原稿截图嵌入) - 触发 Storybook 的 `--quiet` 模式热重载,确保 Canvas 与 Docs Tab 实时一致 ### 步骤 5:验证与提交 - 启动 Storybook:`npm run storybook`,检查: - 所有变体(Primary/Secondary, Small/Medium/Large)是否正确渲染 - Controls 面板是否完整映射 JSON 中定义的 `properties`,且默认值匹配设计稿 - Docs Tab 中 Props 表字段类型(`string | boolean | 'sm' | 'md'`)与 JSDoc 描述一致 - 运行 `npm run type-check` 和 `npm run lint` 确保生成代码符合项目 ESLint/Prettier 规则 - 提交生成文件(排除 `node_modules/` 和临时缓存),建议 `.gitignore` 中保留 `*.generated.ts` 以区分人工修改文件 ## 注意事项与最佳实践 - ✅ **设计稿要求**:Figma 组件必须使用 `Variant` 功能组织状态(而非手动复制图层),文本节点需绑定 `Text Style` 以支持 token 映射 - ✅ **命名一致性**:Figma 组件名应遵循 PascalCase(如 `PrimaryButton`),避免空格或特殊字符,CLI 将直接映射为 React 组件名 - ⚠️ **LLM 输出校验**:首次生成后务必人工复核 `asChild`、`ref` 处理、事件回调签名(如 `onClick?: (e: React.MouseEvent) => void`)是否符合项目约定 - ⚠️ **Tailwind 安全性**:生成器默认启用 `safelist` 模式,对动态 class(如 `bg-${color}`)自动添加至 `tailwind.config.js`,需定期清理冗余条目 - 🌟 **进阶集成**:可配合 GitHub Actions,在 PR 提交 `design/` 下 JSON 文件时自动触发生成并创建 Draft PR;支持 Vite 插件实时监听设计变更 ## 常见问题提示 - **Q:生成的组件缺少响应式行为?** A:检查 Figma 中是否为容器设置了 `Constraints`(如 `Width: Fill container`),并在 `config/generation.config.ts` 中启用 `responsiveLayout: true` - **Q:Storybook Props 表未显示 JSDoc 描述?** A:确认 `Button.tsx` 中 JSDoc 使用标准格式(`/** @param size - 按钮尺寸,支持 'sm' | 'md' | 'lg' */`),且 `preview.ts` 已导入 `@storybook/addon-docs` 并启用 `docs: { autodocs: 'tag' }` - **Q:LLM 生成报错 `RateLimitError`?** A:降低并发请求数(CLI 默认 `--concurrency=2`),或切换至本地模型(如 Ollama + `llama3.1:8b`),详见 `./docs/local-llm-setup.md` - **Q:如何扩展支持自定义 Hook(如 useTheme)?** A:在 `config/templates/component.hbs` 中添加 Handlebars 条件块,并在 `config/generation.config.ts` 的 `customHooks` 字段声明依赖路径