--- name: v0-project-converter description: 将 V0 生成的 Next.js 项目转换为本项目页面组件的流程规范;在执行 V0 项目转换、依赖清理、路径别名替换、样式迁移与验收时使用。 --- # V0 项目转换规范 将 V0 生成的 Next.js 项目快速转换为本项目页面组件,保持视觉效果和功能,符合本项目开发规范。 ## 核心目标 - 保持页面视觉一致性 - 移除 Next.js 特有实现 - 产出可在本项目中运行的页面组件 ## 使用方式 ### 步骤 1:运行预处理脚本 ```bash node scripts/v0-converter.mjs [output-name] # 示例 node scripts/v0-converter.mjs "temp/my-v0-project" my-page ``` **脚本会自动完成**: - 完整复制 V0 项目到 `src/prototypes/[页面名]/` - 分析项目结构(路径别名、Next.js 代码等) - 生成 AI 工作文档(`.v0-tasks.md`) - 生成详细数据(`.v0-analysis.json`) - **不修改任何代码**(100% 安全) ### 步骤 2:按任务清单完成转换 脚本会生成 `.v0-tasks.md` 文件,包含: - 项目概况统计 - 6 个具体任务清单 - 路径别名转换参考表 - 依赖安装命令 - 验收测试步骤 按任务清单与本规范示例执行转换。 ## 转换要点 ### 本项目页面组件规范 默认先转换为普通 React 页面组件。只有在需求明确要求接入 Axhub / Axure 运行时能力时,才引入 `forwardRef`、`useImperativeHandle` 和 `axure-types`。 **默认格式(推荐)**: ```typescript /** * @name 页面名称 * * 参考资料: * - /rules/development-guide.md * - /skills/default-resource-recommendations/SKILL.md */ import './style.css'; import React from 'react'; export default function PageName() { // 组件逻辑 return ( // JSX 内容 ); } ``` **仅在以下场景才接入 Axure API**: - 页面需要被 Axhub / Axure 接管 - 需要配置面板、外部数据源、事件回调或动作触发 - 用户明确要求保持与现有 Axure 组件一致的接口形式 此时再参考 `/rules/axure-api-guide.md`,使用如下包装形式: ```typescript import React, { forwardRef, useImperativeHandle } from 'react'; import type { AxureProps, AxureHandle } from '../../common/axure-types'; const Component = forwardRef(function PageName(innerProps, ref) { useImperativeHandle(ref, function () { return { getVar: function () { return undefined; }, fireAction: function () {}, eventList: [], actionList: [], varList: [], configList: [], dataList: [] }; }, []); return ( // JSX 内容 ); }); export default Component; ``` ### 移除 Next.js 特定代码 移除所有 Next.js 特定实现: ```typescript // ❌ 需要移除 "use client" // Next.js 客户端组件指令,本项目不需要 import { useRouter } from 'next/navigation' // Next.js 路由 import Image from 'next/image' // Next.js 图片组件 import Link from 'next/link' // Next.js 链接组件 import type { Metadata } from 'next' // Next.js 元数据类型 import { Analytics } from '@vercel/analytics/next' // Vercel 分析 // ✅ 替换为 // 删除 "use client" 指令 // 删除 useRouter 相关代码 替代 替代 // 删除 Metadata 和 Analytics ``` **关于 "use client"**: -本项目不使用 Next.js,所有组件都是客户端渲染 - 必须删除,否则会导致语法错误 ### 路径别名转换 将 V0 的 `@/` 别名转换为相对路径: ```typescript // V0 原始代码 import { cn } from "@/lib/utils" import { Button } from "@/components/ui/button" // 在 app/page.tsx 中转换为 import { cn } from "../lib/utils" import { Button } from "../components/ui/button" // 在 components/ui/card.tsx 中转换为 import { cn } from "../../lib/utils" ``` 脚本生成的分析报告会提供每个文件的具体转换参考。 ### 样式文件 ```css /* style.css 必须以此开头 */ @import "tailwindcss"; /* 然后是原 globals.css 的内容 */ /* 保持 Tailwind V4 语法不变 */ @theme inline { ... } @custom-variant dark (...); ``` ### 依赖管理 排除 Next.js 相关依赖: - `next` 及所有 `next-*` 包 - `@vercel/*` 包 - `react` 和 `react-dom`(本项目已有) 保留其他依赖: - `class-variance-authority`, `clsx`, `tailwind-merge` - `@radix-ui/*` 组件 - `lucide-react`, `recharts`, `date-fns` 等 ## 验收标准 转换完成后运行验收脚本: ```bash node scripts/check-app-ready.mjs /prototypes/[页面名] ``` **验收要求**: - 状态为 READY - 页面能正常渲染 - 无控制台错误 - 交互功能正常 - 样式显示正确 ## 常见问题 ### 依赖缺失 ```bash # 根据报告中的依赖列表安装 pnpm add [依赖名称] ``` ### 路径错误 - 检查 `@/` 是否已转换为相对路径 - 参考 `.v0-analysis.md` 中的转换表 ### 样式问题 - 确认 `style.css` 包含 `@import "tailwindcss"` - 检查 CSS 变量是否完整 ### Next.js 残留 - 搜索 `"use client"`、`next/`、`@vercel/` - 确保全部移除或替换 ## 参考资源 - **开发规范**:`/rules/development-guide.md` - **调试指南**:`/rules/debugging-guide.md` - **Tailwind CSS**:`/skills/default-resource-recommendations/SKILL.md`