Optimized the root .gitignore to exclude virtual environments, node modules, and temp folders to ensure clean and lightweight version tracking. Co-authored-by: Cursor <cursoragent@cursor.com>
240 lines
8.1 KiB
Markdown
240 lines
8.1 KiB
Markdown
---
|
||
name: figma-make-project-converter
|
||
description: 将 Figma Make 导出的 Vite + React 项目转换为本项目页面组件或主题的流程规范;在处理 @/ 路径、package@version 别名、globals.css 样式迁移与主题提取时使用。
|
||
---
|
||
|
||
# Figma Make 项目转换规范
|
||
|
||
将 Figma Make 导出的 Vite + React 项目转换为本项目页面组件或主题,尽量保持视觉效果、样式 token 和组件结构。
|
||
|
||
## 核心目标
|
||
|
||
- 保持页面视觉与层级结构一致
|
||
- 移除对 Figma Make 原始 Vite 入口和版本化 alias 的依赖
|
||
- 产出可在本项目中继续演化的页面组件或主题
|
||
|
||
## 使用方式
|
||
|
||
### 步骤 1:运行预处理脚本
|
||
|
||
推荐输入来源:
|
||
|
||
- 优先使用 **Figma 原始导出的 ZIP 工程包**
|
||
- 由系统先解压 ZIP,再把解压后的项目目录传给本脚本
|
||
- 不建议手工解压后再挑文件、删文件或重组目录,否则容易破坏 Figma 原始项目结构,降低后续导入稳定性
|
||
|
||
```bash
|
||
node scripts/figma-make-converter.mjs <figma-make-project-dir> [output-name]
|
||
|
||
# 示例
|
||
node scripts/figma-make-converter.mjs "temp/my-figma-make-project" my-page
|
||
node scripts/figma-make-converter.mjs "temp/my-figma-make-project" brand-theme --target-type themes
|
||
```
|
||
|
||
脚本会自动完成:
|
||
- 完整复制 Figma Make 项目到 `src/prototypes/[页面名]/` 或 `src/themes/[theme-key]/`
|
||
- 排除 `node_modules`、`.npm-local-cache`、`build`
|
||
- 转换 `@/` 为相对路径
|
||
- 将源码中的 `package@version` 导入改为裸包名
|
||
- 分析组件、页面、依赖、CSS、设计文档
|
||
- 生成 AI 工作文档和分析报告
|
||
|
||
### 步骤 2:按任务清单完成转换
|
||
|
||
重点查看:
|
||
- `.figma-make-tasks.md`
|
||
- `.figma-make-analysis.json`
|
||
- 主题模式下的 `.figma-make-theme-tasks.md`
|
||
|
||
## Figma Make 项目特征
|
||
|
||
典型结构:
|
||
|
||
```text
|
||
figma-make-project/
|
||
├── src/
|
||
│ ├── App.tsx
|
||
│ ├── main.tsx
|
||
│ ├── index.css
|
||
│ ├── DESIGN_SYSTEM_GUIDE.md
|
||
│ ├── TOKEN_REFERENCE.md
|
||
│ ├── components/
|
||
│ ├── pages/
|
||
│ ├── styles/globals.css
|
||
│ └── guidelines/
|
||
├── index.html
|
||
├── package.json
|
||
└── vite.config.ts
|
||
```
|
||
|
||
导入时应把这套原始 ZIP 中的目录结构视为权威结构,尤其是:
|
||
|
||
- `src/App.tsx`
|
||
- `src/main.tsx`
|
||
- `src/index.css`
|
||
- `src/styles/globals.css`
|
||
- `src/components/**`
|
||
- `src/pages/**`
|
||
- `src/guidelines/**`
|
||
- `package.json`
|
||
- `vite.config.ts`
|
||
- `index.html`
|
||
|
||
说明:
|
||
|
||
- `Attributions.md`、`guidelines/Guidelines.md`、`README.md`、`TOKEN_REFERENCE.md`、`DESIGN_SYSTEM_GUIDE.md` 这类文件在 Figma 原始导出中是正常组成部分,不应误判为异常垃圾文件
|
||
- 转换时的重点不是删掉这些文件,而是识别哪些文件是页面真实依赖,哪些是说明文档
|
||
|
||
关键判断:
|
||
- 这是 **Vite + React** 项目,不是 Next.js
|
||
- 不需要处理 `"use client"`
|
||
- `vite.config.ts` 里的 `package@version` alias 只是导出兼容层,不应作为最终运行前提
|
||
|
||
## 保留导出所需的原始文件
|
||
|
||
如果导入后的目录中已经包含以下 Figma Make 原始资产,后续转换时必须保留,不要删除或覆盖为无关内容:
|
||
|
||
- `canvas.fig`:Figma Make 的二进制设计数据,用于后续回写源码并导出 `名称.fig`
|
||
- `meta.json`:项目元数据,至少保留 `file_name`、`exported_at`、`client_meta`
|
||
- `ai_chat.json`:AI 聊天历史,可为空对象 `{}`
|
||
- `thumbnail.png`:项目缩略图
|
||
- `canvas.code-manifest.json`:`canvas.fig` 中 `CODE_FILE` 的索引清单
|
||
- `images/`:设计稿图片资源,通常为 hash 命名,不要随意重命名
|
||
|
||
如果脚本分析报告里出现 `figmaMakeAssets` 字段,说明这些文件已经被保留在导入目录中,AI 在后续整理页面结构时仍需继续保留它们。
|
||
|
||
## 页面转换规则
|
||
|
||
### 固定目录结构
|
||
|
||
为了兼顾 Axhub 运行时和后续 `.fig` 导出,页面目录默认采用以下固定结构:
|
||
|
||
```text
|
||
<page>/
|
||
├── index.tsx # Axhub runtime adapter only
|
||
├── style.css # root style bridge only
|
||
└── src/
|
||
├── App.tsx # Figma export shell only
|
||
├── main.tsx # Vite mount only
|
||
├── index.css # Figma style bridge only
|
||
├── components/ # shared page implementation
|
||
└── styles/ # shared page styles
|
||
```
|
||
|
||
转换时请遵守:
|
||
|
||
- 页面真实视觉和交互主体优先沉淀到 `src/components/**`
|
||
- 根目录 `index.tsx` 只负责 Axhub 运行时数据、事件、变量适配
|
||
- `src/App.tsx` 只负责挂载共享页面主体
|
||
- `style.css` / `src/index.css` 尽量只做样式桥接,不重复堆业务样式
|
||
- 在 `index.tsx`、`src/App.tsx`、`src/main.tsx` 顶部写职责注释,提醒后续维护者不要让入口漂移
|
||
|
||
执行本技能后的最终项目必须符合这套固定结构;如果当前输出仍是双入口各自维护一套页面逻辑,视为转换未完成。
|
||
|
||
### 页面组件规范
|
||
|
||
默认先转换为普通 React 页面组件。只有明确需要接入 Axhub / Axure 运行时能力时,才额外引入 `forwardRef` 和 `axure-types`。
|
||
|
||
推荐格式:
|
||
|
||
```tsx
|
||
import './style.css';
|
||
import React from 'react';
|
||
|
||
export default function PageName() {
|
||
return <div />;
|
||
}
|
||
```
|
||
|
||
### 入口收敛
|
||
|
||
- 优先从 `src/App.tsx` 收敛为本项目的 `index.tsx`
|
||
- `src/main.tsx` 只作为原始挂载入口参考,不保留为最终运行入口
|
||
- 若 `src/pages/` + 路由很多,最终仍要收敛为本项目单入口页面组件
|
||
- 如果页面后续还要重新导出为 Figma 资产,务必反向维护一个与根目录 `index.tsx` 同步的导出壳子 `src/App.tsx`
|
||
- 最稳妥的方式是让 `src/App.tsx` 尽量薄,只做包装或直接复用当前页面组件,避免出现两套页面逻辑长期漂移
|
||
|
||
### 路径与 alias
|
||
|
||
- `@/` 统一视为 `./src`
|
||
- 若源码里还残留 `package@version` 导入,继续改为裸包名
|
||
- `vite.config.ts` 可以保留作参考,但最终组件不能依赖其中 alias 才能运行
|
||
|
||
## 样式处理规则
|
||
|
||
Figma Make 的 `src/index.css` 常常是 Tailwind v4 构建产物,默认不要直接搬运为最终 `style.css`。
|
||
|
||
### `style.css` 生成策略
|
||
|
||
最终页面的 `style.css` 采用:
|
||
|
||
```css
|
||
@import "tailwindcss";
|
||
```
|
||
|
||
然后以 `src/styles/globals.css` 为主要样式来源继续整理。
|
||
|
||
规则:
|
||
- `src/styles/globals.css` 是主样式来源
|
||
- `src/index.css` 只作为视觉回归参考
|
||
- 若 `globals.css` 缺失,再结合组件现有样式补齐
|
||
- 如果页面后续还要重新导出 `.fig`,需要同时保证导出壳子使用的 `src/index.css` 与最终 `style.css` 保持一致,至少不能明显漂移
|
||
|
||
## 依赖处理
|
||
|
||
保留需要的运行依赖,默认排除:
|
||
- `react`
|
||
- `react-dom`
|
||
- `next-themes`
|
||
|
||
如果分析报告里有这些包以外的依赖,按需执行:
|
||
|
||
```bash
|
||
pnpm add <依赖名>
|
||
```
|
||
|
||
## 主题导入规则
|
||
|
||
当目标是 `themes` 时,优先从以下来源提取 token:
|
||
- `DESIGN_SYSTEM_GUIDE.md`
|
||
- `TOKEN_REFERENCE.md`
|
||
- `src/styles/globals.css`
|
||
- 组件里的 CSS 变量和设计语义
|
||
|
||
期望产物:
|
||
- `src/themes/<theme-key>/globals.css` 或 `designToken.json`
|
||
- `src/themes/<theme-key>/DESIGN-SPEC.md`
|
||
- `src/themes/<theme-key>/index.tsx`
|
||
|
||
同时可按需补充:
|
||
- `src/docs/`
|
||
- `src/database/`
|
||
|
||
## 验收标准
|
||
|
||
页面模式:
|
||
|
||
```bash
|
||
node scripts/check-app-ready.mjs /prototypes/<page-name>
|
||
```
|
||
|
||
验收要求:
|
||
- 页面正常渲染
|
||
- 无控制台错误
|
||
- 主视觉与原项目基本一致
|
||
- 不再依赖原始 Vite alias 才能运行
|
||
|
||
主题模式:
|
||
- token 文件存在且结构完整
|
||
- `DESIGN-SPEC.md` 说明清晰
|
||
- 主题演示入口能体现核心 token 效果
|
||
|
||
## 常见注意点
|
||
|
||
- 不要把 `src/index.css` 直接当最终 `style.css`
|
||
- 不要继续保留对 `package@version` alias 的运行时依赖
|
||
- 不要把完整多页面路由壳层原封不动塞进最终页面组件
|
||
- 优先利用设计文档和 CSS 变量提取主题,而不是只看视觉截图
|
||
- 如果目录内已有 `canvas.fig`、`meta.json`、`images/` 等原始资产,转换时不要删除它们
|
||
- 如果目录内已有 `src/App.tsx` / `src/index.css` 作为 Figma 导出壳子,修改根目录页面后要同步更新它们,否则后续导出的 `.fig` 会与当前页面不一致
|