文章目录
-
- 一、hy-app是什么?
- [二、为什么 Vue 3 + TypeScript + uni-app 项目值得考虑 hy-app?](#二、为什么 Vue 3 + TypeScript + uni-app 项目值得考虑 hy-app?)
-
- 传统组件库解决的是:
- [而 AI Coding 时代更适合:](#而 AI Coding 时代更适合:)
- 三、hy-app的核心优势
-
- [1. Vue 3 + TypeScript 原生开发体验](#1. Vue 3 + TypeScript 原生开发体验)
- [四、强类型定义:让开发者和 AI 都更容易正确使用组件](#四、强类型定义:让开发者和 AI 都更容易正确使用组件)
- [五、hy-app+ MCP:让 AI 真正"会用"组件库](#五、hy-app+ MCP:让 AI 真正“会用”组件库)
- [六、hy-app AI Coding 规范](#六、hy-app AI Coding 规范)
- [七、hy-app + llms.txt:让 AI 更容易理解官方知识](#七、hy-app + llms.txt:让 AI 更容易理解官方知识)
- [八、hy-app + AI:不仅生成代码,更规范代码](#八、hy-app + AI:不仅生成代码,更规范代码)
- [九、亮色 / 暗色主题](#九、亮色 / 暗色主题)
- 十、国际化
- 十一、跨端开发
- 十二、业务组件:减少重复造轮子
- [十三、hy-app 与其他 uni-app 组件库](#十三、hy-app 与其他 uni-app 组件库)
- [十四、hy-app 的核心竞争力](#十四、hy-app 的核心竞争力)
- 十五、快速开始
如果你正在使用 Vue 3 + TypeScript + uni-app 开发移动端、微信小程序、H5 或 App,那么 hy-app(华玥组件库)不仅可以作为一套 UI 组件库使用,还可以作为 AI Coding 时代的前端开发基础设施。
hy-app = Vue 3 + TypeScript + uni-app + 跨端 UI + 强类型 + AI Coding + MCP
hy-app 的核心目标不是简单提供 Button、Input、Popup 等 UI 组件,而是让:开发者、组件库和 AI Agent 按照同一套规范协同开发。
尤其是在使用 Cursor、Trae、Claude Code、Codex 等 AI Coding 工具时,hy-app 可以通过 MCP、结构化组件文档、llms.txt、llms-full.txt、Skills 和官方示例,让 AI 在生成代码之前先了解真实存在的组件和 API,从而减少 AI "凭经验猜参数、猜组件名称、猜事件"的问题。

一、hy-app是什么?
hy-app(华玥组件库)是一套基于:
text
Vue 3 + TypeScript + uni-app
构建的跨端移动端组件库。
text
# npm 包
@hy-app/ui
hy-app面向:
- Vue 3 + TypeScript 项目
- uni-app 跨端应用
- 微信小程序
- H5
- App
- 企业级移动应用
- 电商应用
- ERP / OA / 业务管理系统
同时关注: - 移动端 UI 组件
- 业务组件
- 强 TypeScript 类型
- 主题定制
- 亮色 / 暗色模式
- 国际化
- Hooks / Composables
- AI Coding
- MCP
- llms.txt / llms-full.txt
- Skills
- 多端开发规范
二、为什么 Vue 3 + TypeScript + uni-app 项目值得考虑 hy-app?
传统组件库解决的是:
#mermaid-svg-sYSQKQcBlGgKK0Xj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sYSQKQcBlGgKK0Xj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sYSQKQcBlGgKK0Xj .error-icon{fill:#552222;}#mermaid-svg-sYSQKQcBlGgKK0Xj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sYSQKQcBlGgKK0Xj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sYSQKQcBlGgKK0Xj .marker.cross{stroke:#333333;}#mermaid-svg-sYSQKQcBlGgKK0Xj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sYSQKQcBlGgKK0Xj p{margin:0;}#mermaid-svg-sYSQKQcBlGgKK0Xj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sYSQKQcBlGgKK0Xj .cluster-label text{fill:#333;}#mermaid-svg-sYSQKQcBlGgKK0Xj .cluster-label span{color:#333;}#mermaid-svg-sYSQKQcBlGgKK0Xj .cluster-label span p{background-color:transparent;}#mermaid-svg-sYSQKQcBlGgKK0Xj .label text,#mermaid-svg-sYSQKQcBlGgKK0Xj span{fill:#333;color:#333;}#mermaid-svg-sYSQKQcBlGgKK0Xj .node rect,#mermaid-svg-sYSQKQcBlGgKK0Xj .node circle,#mermaid-svg-sYSQKQcBlGgKK0Xj .node ellipse,#mermaid-svg-sYSQKQcBlGgKK0Xj .node polygon,#mermaid-svg-sYSQKQcBlGgKK0Xj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sYSQKQcBlGgKK0Xj .rough-node .label text,#mermaid-svg-sYSQKQcBlGgKK0Xj .node .label text,#mermaid-svg-sYSQKQcBlGgKK0Xj .image-shape .label,#mermaid-svg-sYSQKQcBlGgKK0Xj .icon-shape .label{text-anchor:middle;}#mermaid-svg-sYSQKQcBlGgKK0Xj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sYSQKQcBlGgKK0Xj .rough-node .label,#mermaid-svg-sYSQKQcBlGgKK0Xj .node .label,#mermaid-svg-sYSQKQcBlGgKK0Xj .image-shape .label,#mermaid-svg-sYSQKQcBlGgKK0Xj .icon-shape .label{text-align:center;}#mermaid-svg-sYSQKQcBlGgKK0Xj .node.clickable{cursor:pointer;}#mermaid-svg-sYSQKQcBlGgKK0Xj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sYSQKQcBlGgKK0Xj .arrowheadPath{fill:#333333;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sYSQKQcBlGgKK0Xj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sYSQKQcBlGgKK0Xj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sYSQKQcBlGgKK0Xj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sYSQKQcBlGgKK0Xj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sYSQKQcBlGgKK0Xj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sYSQKQcBlGgKK0Xj .cluster text{fill:#333;}#mermaid-svg-sYSQKQcBlGgKK0Xj .cluster span{color:#333;}#mermaid-svg-sYSQKQcBlGgKK0Xj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sYSQKQcBlGgKK0Xj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sYSQKQcBlGgKK0Xj rect.text{fill:none;stroke-width:0;}#mermaid-svg-sYSQKQcBlGgKK0Xj .icon-shape,#mermaid-svg-sYSQKQcBlGgKK0Xj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sYSQKQcBlGgKK0Xj .icon-shape p,#mermaid-svg-sYSQKQcBlGgKK0Xj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sYSQKQcBlGgKK0Xj .icon-shape .label rect,#mermaid-svg-sYSQKQcBlGgKK0Xj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sYSQKQcBlGgKK0Xj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sYSQKQcBlGgKK0Xj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sYSQKQcBlGgKK0Xj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开发者提出需求
查阅组件文档
复制官方示例
根据业务修改代码
调试与适配
完成页面
而 AI Coding 时代更适合:
#mermaid-svg-EHyWdd6M8KECMfOC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EHyWdd6M8KECMfOC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EHyWdd6M8KECMfOC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EHyWdd6M8KECMfOC .error-icon{fill:#552222;}#mermaid-svg-EHyWdd6M8KECMfOC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EHyWdd6M8KECMfOC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EHyWdd6M8KECMfOC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EHyWdd6M8KECMfOC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EHyWdd6M8KECMfOC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EHyWdd6M8KECMfOC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EHyWdd6M8KECMfOC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EHyWdd6M8KECMfOC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EHyWdd6M8KECMfOC .marker.cross{stroke:#333333;}#mermaid-svg-EHyWdd6M8KECMfOC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EHyWdd6M8KECMfOC p{margin:0;}#mermaid-svg-EHyWdd6M8KECMfOC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EHyWdd6M8KECMfOC .cluster-label text{fill:#333;}#mermaid-svg-EHyWdd6M8KECMfOC .cluster-label span{color:#333;}#mermaid-svg-EHyWdd6M8KECMfOC .cluster-label span p{background-color:transparent;}#mermaid-svg-EHyWdd6M8KECMfOC .label text,#mermaid-svg-EHyWdd6M8KECMfOC span{fill:#333;color:#333;}#mermaid-svg-EHyWdd6M8KECMfOC .node rect,#mermaid-svg-EHyWdd6M8KECMfOC .node circle,#mermaid-svg-EHyWdd6M8KECMfOC .node ellipse,#mermaid-svg-EHyWdd6M8KECMfOC .node polygon,#mermaid-svg-EHyWdd6M8KECMfOC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EHyWdd6M8KECMfOC .rough-node .label text,#mermaid-svg-EHyWdd6M8KECMfOC .node .label text,#mermaid-svg-EHyWdd6M8KECMfOC .image-shape .label,#mermaid-svg-EHyWdd6M8KECMfOC .icon-shape .label{text-anchor:middle;}#mermaid-svg-EHyWdd6M8KECMfOC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EHyWdd6M8KECMfOC .rough-node .label,#mermaid-svg-EHyWdd6M8KECMfOC .node .label,#mermaid-svg-EHyWdd6M8KECMfOC .image-shape .label,#mermaid-svg-EHyWdd6M8KECMfOC .icon-shape .label{text-align:center;}#mermaid-svg-EHyWdd6M8KECMfOC .node.clickable{cursor:pointer;}#mermaid-svg-EHyWdd6M8KECMfOC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EHyWdd6M8KECMfOC .arrowheadPath{fill:#333333;}#mermaid-svg-EHyWdd6M8KECMfOC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EHyWdd6M8KECMfOC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EHyWdd6M8KECMfOC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EHyWdd6M8KECMfOC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EHyWdd6M8KECMfOC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EHyWdd6M8KECMfOC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EHyWdd6M8KECMfOC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EHyWdd6M8KECMfOC .cluster text{fill:#333;}#mermaid-svg-EHyWdd6M8KECMfOC .cluster span{color:#333;}#mermaid-svg-EHyWdd6M8KECMfOC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EHyWdd6M8KECMfOC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EHyWdd6M8KECMfOC rect.text{fill:none;stroke-width:0;}#mermaid-svg-EHyWdd6M8KECMfOC .icon-shape,#mermaid-svg-EHyWdd6M8KECMfOC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EHyWdd6M8KECMfOC .icon-shape p,#mermaid-svg-EHyWdd6M8KECMfOC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EHyWdd6M8KECMfOC .icon-shape .label rect,#mermaid-svg-EHyWdd6M8KECMfOC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EHyWdd6M8KECMfOC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EHyWdd6M8KECMfOC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EHyWdd6M8KECMfOC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开发者
提出需求
AI Agent
调用 hy-app MCP / 官方文档
查询真实组件
查询真实 Props / Events / Slots / Hooks
检查 TypeScript 类型
检查平台兼容性
遵循 hy-app 开发规范
生成 Vue 3 + TypeScript + uni-app 代码
完成页面
这也是 hy-app 与 AI Coding 结合的重要方向。
三、hy-app的核心优势
1. Vue 3 + TypeScript 原生开发体验
hy-app面向 Vue 3 + TypeScript 项目设计。
推荐使用:
html
<script setup lang="ts">
</script>
配合 TypeScript,可以让 IDE 和 AI Coding 工具更加准确地理解:
- Props 类型
- Event 参数
- Slots
- Hook 返回值
- 组件实例类型
- API 参数
- API 返回值
对于大型项目来说,强类型可以减少大量由于参数错误导致的问题。
四、强类型定义:让开发者和 AI 都更容易正确使用组件
AI 生成前端代码时,一个常见问题是:
AI 知道"应该有一个弹窗",但不知道当前项目中的弹窗到底叫什么、有哪些参数。
如果组件库 API 不够清晰,AI 很容易产生:
html
<hy-popup
:visible="visible"
:close-on-click-overlay="true"
@confirm="handleConfirm"
/>
但这些 API 可能根本不存在。
hy-app 的核心思路是:
#mermaid-svg-Zhegu4MrAqYkhjYA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Zhegu4MrAqYkhjYA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Zhegu4MrAqYkhjYA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Zhegu4MrAqYkhjYA .error-icon{fill:#552222;}#mermaid-svg-Zhegu4MrAqYkhjYA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Zhegu4MrAqYkhjYA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Zhegu4MrAqYkhjYA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Zhegu4MrAqYkhjYA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Zhegu4MrAqYkhjYA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Zhegu4MrAqYkhjYA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Zhegu4MrAqYkhjYA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Zhegu4MrAqYkhjYA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Zhegu4MrAqYkhjYA .marker.cross{stroke:#333333;}#mermaid-svg-Zhegu4MrAqYkhjYA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Zhegu4MrAqYkhjYA p{margin:0;}#mermaid-svg-Zhegu4MrAqYkhjYA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Zhegu4MrAqYkhjYA .cluster-label text{fill:#333;}#mermaid-svg-Zhegu4MrAqYkhjYA .cluster-label span{color:#333;}#mermaid-svg-Zhegu4MrAqYkhjYA .cluster-label span p{background-color:transparent;}#mermaid-svg-Zhegu4MrAqYkhjYA .label text,#mermaid-svg-Zhegu4MrAqYkhjYA span{fill:#333;color:#333;}#mermaid-svg-Zhegu4MrAqYkhjYA .node rect,#mermaid-svg-Zhegu4MrAqYkhjYA .node circle,#mermaid-svg-Zhegu4MrAqYkhjYA .node ellipse,#mermaid-svg-Zhegu4MrAqYkhjYA .node polygon,#mermaid-svg-Zhegu4MrAqYkhjYA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Zhegu4MrAqYkhjYA .rough-node .label text,#mermaid-svg-Zhegu4MrAqYkhjYA .node .label text,#mermaid-svg-Zhegu4MrAqYkhjYA .image-shape .label,#mermaid-svg-Zhegu4MrAqYkhjYA .icon-shape .label{text-anchor:middle;}#mermaid-svg-Zhegu4MrAqYkhjYA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Zhegu4MrAqYkhjYA .rough-node .label,#mermaid-svg-Zhegu4MrAqYkhjYA .node .label,#mermaid-svg-Zhegu4MrAqYkhjYA .image-shape .label,#mermaid-svg-Zhegu4MrAqYkhjYA .icon-shape .label{text-align:center;}#mermaid-svg-Zhegu4MrAqYkhjYA .node.clickable{cursor:pointer;}#mermaid-svg-Zhegu4MrAqYkhjYA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Zhegu4MrAqYkhjYA .arrowheadPath{fill:#333333;}#mermaid-svg-Zhegu4MrAqYkhjYA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Zhegu4MrAqYkhjYA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Zhegu4MrAqYkhjYA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Zhegu4MrAqYkhjYA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Zhegu4MrAqYkhjYA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Zhegu4MrAqYkhjYA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Zhegu4MrAqYkhjYA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Zhegu4MrAqYkhjYA .cluster text{fill:#333;}#mermaid-svg-Zhegu4MrAqYkhjYA .cluster span{color:#333;}#mermaid-svg-Zhegu4MrAqYkhjYA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Zhegu4MrAqYkhjYA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Zhegu4MrAqYkhjYA rect.text{fill:none;stroke-width:0;}#mermaid-svg-Zhegu4MrAqYkhjYA .icon-shape,#mermaid-svg-Zhegu4MrAqYkhjYA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Zhegu4MrAqYkhjYA .icon-shape p,#mermaid-svg-Zhegu4MrAqYkhjYA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Zhegu4MrAqYkhjYA .icon-shape .label rect,#mermaid-svg-Zhegu4MrAqYkhjYA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Zhegu4MrAqYkhjYA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Zhegu4MrAqYkhjYA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Zhegu4MrAqYkhjYA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} hy-app 组件
TypeScript 类型定义
Props / Events / Slots / Methods
官方组件文档
MCP / llms.txt / LLM 文档
AI Agent
让 AI 尽可能基于真实的组件定义和官方资料 生成代码,而不是根据其他 UI 框架的经验猜测。
因此,使用 hy-app 进行 AI Coding 时应该遵循:
先查询,后生成;先验证 API,后写代码。

五、hy-app+ MCP:让 AI 真正"会用"组件库
这是 hy-app AI 体系中非常重要的一部分。
传统 AI Coding:
#mermaid-svg-Z01NNQXgf0iLVK9i{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Z01NNQXgf0iLVK9i .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Z01NNQXgf0iLVK9i .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Z01NNQXgf0iLVK9i .error-icon{fill:#552222;}#mermaid-svg-Z01NNQXgf0iLVK9i .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Z01NNQXgf0iLVK9i .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Z01NNQXgf0iLVK9i .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Z01NNQXgf0iLVK9i .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Z01NNQXgf0iLVK9i .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Z01NNQXgf0iLVK9i .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Z01NNQXgf0iLVK9i .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Z01NNQXgf0iLVK9i .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Z01NNQXgf0iLVK9i .marker.cross{stroke:#333333;}#mermaid-svg-Z01NNQXgf0iLVK9i svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Z01NNQXgf0iLVK9i p{margin:0;}#mermaid-svg-Z01NNQXgf0iLVK9i .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Z01NNQXgf0iLVK9i .cluster-label text{fill:#333;}#mermaid-svg-Z01NNQXgf0iLVK9i .cluster-label span{color:#333;}#mermaid-svg-Z01NNQXgf0iLVK9i .cluster-label span p{background-color:transparent;}#mermaid-svg-Z01NNQXgf0iLVK9i .label text,#mermaid-svg-Z01NNQXgf0iLVK9i span{fill:#333;color:#333;}#mermaid-svg-Z01NNQXgf0iLVK9i .node rect,#mermaid-svg-Z01NNQXgf0iLVK9i .node circle,#mermaid-svg-Z01NNQXgf0iLVK9i .node ellipse,#mermaid-svg-Z01NNQXgf0iLVK9i .node polygon,#mermaid-svg-Z01NNQXgf0iLVK9i .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Z01NNQXgf0iLVK9i .rough-node .label text,#mermaid-svg-Z01NNQXgf0iLVK9i .node .label text,#mermaid-svg-Z01NNQXgf0iLVK9i .image-shape .label,#mermaid-svg-Z01NNQXgf0iLVK9i .icon-shape .label{text-anchor:middle;}#mermaid-svg-Z01NNQXgf0iLVK9i .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Z01NNQXgf0iLVK9i .rough-node .label,#mermaid-svg-Z01NNQXgf0iLVK9i .node .label,#mermaid-svg-Z01NNQXgf0iLVK9i .image-shape .label,#mermaid-svg-Z01NNQXgf0iLVK9i .icon-shape .label{text-align:center;}#mermaid-svg-Z01NNQXgf0iLVK9i .node.clickable{cursor:pointer;}#mermaid-svg-Z01NNQXgf0iLVK9i .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Z01NNQXgf0iLVK9i .arrowheadPath{fill:#333333;}#mermaid-svg-Z01NNQXgf0iLVK9i .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Z01NNQXgf0iLVK9i .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Z01NNQXgf0iLVK9i .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Z01NNQXgf0iLVK9i .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Z01NNQXgf0iLVK9i .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Z01NNQXgf0iLVK9i .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Z01NNQXgf0iLVK9i .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Z01NNQXgf0iLVK9i .cluster text{fill:#333;}#mermaid-svg-Z01NNQXgf0iLVK9i .cluster span{color:#333;}#mermaid-svg-Z01NNQXgf0iLVK9i div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Z01NNQXgf0iLVK9i .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Z01NNQXgf0iLVK9i rect.text{fill:none;stroke-width:0;}#mermaid-svg-Z01NNQXgf0iLVK9i .icon-shape,#mermaid-svg-Z01NNQXgf0iLVK9i .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Z01NNQXgf0iLVK9i .icon-shape p,#mermaid-svg-Z01NNQXgf0iLVK9i .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Z01NNQXgf0iLVK9i .icon-shape .label rect,#mermaid-svg-Z01NNQXgf0iLVK9i .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Z01NNQXgf0iLVK9i .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Z01NNQXgf0iLVK9i .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Z01NNQXgf0iLVK9i :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户提问
帮我写一个 hy-app 登录页面
AI执行
凭模型记忆猜组件
凭经验猜 Props
凭经验猜 Events
直接生成代码
容易出现
text
❌ 不存在的组件
❌ 不存在的 Props
❌ 不存在的 Events
❌ 不存在的 Hooks
❌ 错误的参数类型
❌ 与当前版本不一致的 API
而 hy-app 的目标是:
#mermaid-svg-yA4yAxJURtJzngfl{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-yA4yAxJURtJzngfl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yA4yAxJURtJzngfl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yA4yAxJURtJzngfl .error-icon{fill:#552222;}#mermaid-svg-yA4yAxJURtJzngfl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yA4yAxJURtJzngfl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yA4yAxJURtJzngfl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yA4yAxJURtJzngfl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yA4yAxJURtJzngfl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yA4yAxJURtJzngfl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yA4yAxJURtJzngfl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yA4yAxJURtJzngfl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yA4yAxJURtJzngfl .marker.cross{stroke:#333333;}#mermaid-svg-yA4yAxJURtJzngfl svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yA4yAxJURtJzngfl p{margin:0;}#mermaid-svg-yA4yAxJURtJzngfl .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-yA4yAxJURtJzngfl .cluster-label text{fill:#333;}#mermaid-svg-yA4yAxJURtJzngfl .cluster-label span{color:#333;}#mermaid-svg-yA4yAxJURtJzngfl .cluster-label span p{background-color:transparent;}#mermaid-svg-yA4yAxJURtJzngfl .label text,#mermaid-svg-yA4yAxJURtJzngfl span{fill:#333;color:#333;}#mermaid-svg-yA4yAxJURtJzngfl .node rect,#mermaid-svg-yA4yAxJURtJzngfl .node circle,#mermaid-svg-yA4yAxJURtJzngfl .node ellipse,#mermaid-svg-yA4yAxJURtJzngfl .node polygon,#mermaid-svg-yA4yAxJURtJzngfl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yA4yAxJURtJzngfl .rough-node .label text,#mermaid-svg-yA4yAxJURtJzngfl .node .label text,#mermaid-svg-yA4yAxJURtJzngfl .image-shape .label,#mermaid-svg-yA4yAxJURtJzngfl .icon-shape .label{text-anchor:middle;}#mermaid-svg-yA4yAxJURtJzngfl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yA4yAxJURtJzngfl .rough-node .label,#mermaid-svg-yA4yAxJURtJzngfl .node .label,#mermaid-svg-yA4yAxJURtJzngfl .image-shape .label,#mermaid-svg-yA4yAxJURtJzngfl .icon-shape .label{text-align:center;}#mermaid-svg-yA4yAxJURtJzngfl .node.clickable{cursor:pointer;}#mermaid-svg-yA4yAxJURtJzngfl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yA4yAxJURtJzngfl .arrowheadPath{fill:#333333;}#mermaid-svg-yA4yAxJURtJzngfl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yA4yAxJURtJzngfl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yA4yAxJURtJzngfl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yA4yAxJURtJzngfl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yA4yAxJURtJzngfl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yA4yAxJURtJzngfl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yA4yAxJURtJzngfl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yA4yAxJURtJzngfl .cluster text{fill:#333;}#mermaid-svg-yA4yAxJURtJzngfl .cluster span{color:#333;}#mermaid-svg-yA4yAxJURtJzngfl div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yA4yAxJURtJzngfl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yA4yAxJURtJzngfl rect.text{fill:none;stroke-width:0;}#mermaid-svg-yA4yAxJURtJzngfl .icon-shape,#mermaid-svg-yA4yAxJURtJzngfl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yA4yAxJURtJzngfl .icon-shape p,#mermaid-svg-yA4yAxJURtJzngfl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yA4yAxJURtJzngfl .icon-shape .label rect,#mermaid-svg-yA4yAxJURtJzngfl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yA4yAxJURtJzngfl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yA4yAxJURtJzngfl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yA4yAxJURtJzngfl :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户提出需求
AI Agent读取hy-app skills开发规范
然后调用hy-app MCP
查询真实组件
查询真实 API
查询 TypeScript 类型
查询官方示例
检查平台兼容性
遵循 hy-app 规范生成代码
例如:
text
用户:
使用 `hy-app` 做一个登录页面
AI 应该先:
text
1. 查询表单组件
2. 查询输入组件
3. 查询按钮组件
4. 查询校验能力
5. 查询 Toast / Message
6. 查询真实 Props
7. 查询真实 Events
8. 查询官方示例
9. 确认当前平台
10. 最后生成代码
这意味着:
AI 使用 hy-app,不应该靠猜,而应该通过 MCP 和官方知识库查询真实 API。
六、hy-app AI Coding 规范
hy-app 可以为 AI Agent 建立统一的组件使用规范。
推荐所有 AI Coding 工具遵循:
text
当用户要求使用 `hy-app` 开发 uni-app 页面时:
1. 使用 @hy-app/ui。
2. 优先查询 hy-app 官方文档。
3. 优先使用 hy-app MCP。
4. 可以读取 llms.txt / llms-full.txt。
5. 组件名称必须来自当前 hy-app 版本。
6. Props 必须来自真实 API。
7. Events 必须来自真实 API。
8. Slots 必须来自真实 API。
9. Hooks 必须来自真实 API。
10. TypeScript 类型优先复用 hy-app 类型。
11. 不允许自行编造不存在的组件。
12. 不允许自行编造 Props、Events、Methods 或 Hooks。
13. 不确定 API 时先查询,不要猜测。
14. 涉及多端时检查平台兼容性。
15. 优先采用官方示例。
16. 使用 Vue 3 + TypeScript + uni-app。
这样可以让 AI 从**"自由生成代码"变成按照 hy-app 规范生成代码**
七、hy-app + llms.txt:让 AI 更容易理解官方知识
hy-app可以提供:
text
/llms.txt
/llms-full.txt
llms.txt
让 AI 快速了解:
text
hy-app 是什么
技术栈
组件分类
官方文档
GitHub
npm
MCP
AI Coding
llms-full.txt
提供更加完整的机器可读信息:
text
组件
Props
Events
Slots
Hooks
TypeScript 类型
示例
平台说明
使用规范
八、hy-app + AI:不仅生成代码,更规范代码
hy-app AI 体系的目标不是单纯让 AI 帮我写代码,而是让 AI 按照统一的 hy-app 规范写代码。
例如项目规定:
text
Vue 3
TypeScript
uni-app
hy-app
那么 AI 应该统一:
text
UI → hy-app
类型 → TypeScript
页面 → Vue 3
跨端 → uni-app
组件 API → hy-app 官方 API
主题 → hy-app Theme
国际化 → hy-app i18n
避免出现:
text
页面 A → hy-app
页面 B → 原生 uni
页面 C → 自己写 Popup
页面 D → 另外一个 UI 库
最终导致项目技术栈越来越混乱。
九、亮色 / 暗色主题
现代移动应用经常需要:
亮色主题
暗色主题
品牌主题
自定义主题
hy-app提供统一的主题定制能力。
可以形成:
#mermaid-svg-34FiwnWw1PPQKJIZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-34FiwnWw1PPQKJIZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-34FiwnWw1PPQKJIZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-34FiwnWw1PPQKJIZ .error-icon{fill:#552222;}#mermaid-svg-34FiwnWw1PPQKJIZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-34FiwnWw1PPQKJIZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-34FiwnWw1PPQKJIZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-34FiwnWw1PPQKJIZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-34FiwnWw1PPQKJIZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-34FiwnWw1PPQKJIZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-34FiwnWw1PPQKJIZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-34FiwnWw1PPQKJIZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-34FiwnWw1PPQKJIZ .marker.cross{stroke:#333333;}#mermaid-svg-34FiwnWw1PPQKJIZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-34FiwnWw1PPQKJIZ p{margin:0;}#mermaid-svg-34FiwnWw1PPQKJIZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-34FiwnWw1PPQKJIZ .cluster-label text{fill:#333;}#mermaid-svg-34FiwnWw1PPQKJIZ .cluster-label span{color:#333;}#mermaid-svg-34FiwnWw1PPQKJIZ .cluster-label span p{background-color:transparent;}#mermaid-svg-34FiwnWw1PPQKJIZ .label text,#mermaid-svg-34FiwnWw1PPQKJIZ span{fill:#333;color:#333;}#mermaid-svg-34FiwnWw1PPQKJIZ .node rect,#mermaid-svg-34FiwnWw1PPQKJIZ .node circle,#mermaid-svg-34FiwnWw1PPQKJIZ .node ellipse,#mermaid-svg-34FiwnWw1PPQKJIZ .node polygon,#mermaid-svg-34FiwnWw1PPQKJIZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-34FiwnWw1PPQKJIZ .rough-node .label text,#mermaid-svg-34FiwnWw1PPQKJIZ .node .label text,#mermaid-svg-34FiwnWw1PPQKJIZ .image-shape .label,#mermaid-svg-34FiwnWw1PPQKJIZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-34FiwnWw1PPQKJIZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-34FiwnWw1PPQKJIZ .rough-node .label,#mermaid-svg-34FiwnWw1PPQKJIZ .node .label,#mermaid-svg-34FiwnWw1PPQKJIZ .image-shape .label,#mermaid-svg-34FiwnWw1PPQKJIZ .icon-shape .label{text-align:center;}#mermaid-svg-34FiwnWw1PPQKJIZ .node.clickable{cursor:pointer;}#mermaid-svg-34FiwnWw1PPQKJIZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-34FiwnWw1PPQKJIZ .arrowheadPath{fill:#333333;}#mermaid-svg-34FiwnWw1PPQKJIZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-34FiwnWw1PPQKJIZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-34FiwnWw1PPQKJIZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-34FiwnWw1PPQKJIZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-34FiwnWw1PPQKJIZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-34FiwnWw1PPQKJIZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-34FiwnWw1PPQKJIZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-34FiwnWw1PPQKJIZ .cluster text{fill:#333;}#mermaid-svg-34FiwnWw1PPQKJIZ .cluster span{color:#333;}#mermaid-svg-34FiwnWw1PPQKJIZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-34FiwnWw1PPQKJIZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-34FiwnWw1PPQKJIZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-34FiwnWw1PPQKJIZ .icon-shape,#mermaid-svg-34FiwnWw1PPQKJIZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-34FiwnWw1PPQKJIZ .icon-shape p,#mermaid-svg-34FiwnWw1PPQKJIZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-34FiwnWw1PPQKJIZ .icon-shape .label rect,#mermaid-svg-34FiwnWw1PPQKJIZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-34FiwnWw1PPQKJIZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-34FiwnWw1PPQKJIZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-34FiwnWw1PPQKJIZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} hy-app Theme
Light
Dark
Application UI
这样业务页面不需要反复定义:
text
背景颜色
文字颜色
边框颜色
按钮颜色
卡片颜色
而是由统一的主题系统控制。
这对于 AI Coding 同样重要:
AI 优先使用 hy-app 的主题体系,而不是每生成一个页面就重新发明一套颜色规范。

十、国际化
对于出海 App、SaaS、企业系统以及多地区业务,国际化能力非常重要。
典型场景:
text
中文
英文
日文
其他语言
组件库中的公共 UI 场景,例如:
text
加载
空状态
分页
日期
选择器
提示
应该能够配合统一的国际化机制。
这样可以避免组件内部大量写死语言文本。
十一、跨端开发
uni-app 的核心价值之一就是跨端开发。
hy-app围绕 uni-app 提供移动端组件体系,可以用于:
不同组件可能存在平台差异,因此实际使用时应以当前版本官方组件兼容说明为准。
AI 生成代码时也应该检查这一点,而不是假设所有组件在所有平台行为完全一致。
十二、业务组件:减少重复造轮子
传统 UI 组件主要解决:
Button
Input
Icon
Popup
但真实企业项目还需要:
表单
列表
数据展示
复杂交互
业务操作
提交栏
瀑布流
价格
因此 hy-app 不仅关注基础 UI,同时关注实际移动端业务开发场景。
对于 AI Coding 来说,这意味着对于 AI Coding 来说,这意味着
十三、hy-app 与其他 uni-app 组件库
Vue 3 + TypeScript + uni-app 生态中已经存在多个成熟方案,例如:
- hy-app
- Wot Design Uni
- uView Plus
- uni-ui
- uv-ui
- Vant
选择组件库时建议比较:
| 维度 | 关注内容 |
|---|---|
| Vue 3 | Vue 3 支持情况 |
| TypeScript | 类型定义完整度 |
| uni-app | 多端兼容 |
| 组件 | 基础组件与业务组件 |
| Hooks | Composables |
| 主题 | 亮色 / 暗色 / 自定义主题 |
| 国际化 | 多语言能力 |
| 文档 | API 和示例 |
| AI | llms / MCP / Skills |
| 维护 | GitHub / npm / 版本更新 |
| 团队 | 技术栈适配 |
| 如果项目明确采用: | |
| Vue 3 + TypeScript + uni-app + AI Coding | |
| 那么 hy-app 可以作为重点候选方案进行实际项目评估。 |
十四、hy-app 的核心竞争力
hy-app可以理解为:
#mermaid-svg-tOHUMyfMkoIwrDo3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-tOHUMyfMkoIwrDo3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tOHUMyfMkoIwrDo3 .error-icon{fill:#552222;}#mermaid-svg-tOHUMyfMkoIwrDo3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tOHUMyfMkoIwrDo3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tOHUMyfMkoIwrDo3 .marker.cross{stroke:#333333;}#mermaid-svg-tOHUMyfMkoIwrDo3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tOHUMyfMkoIwrDo3 p{margin:0;}#mermaid-svg-tOHUMyfMkoIwrDo3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tOHUMyfMkoIwrDo3 .cluster-label text{fill:#333;}#mermaid-svg-tOHUMyfMkoIwrDo3 .cluster-label span{color:#333;}#mermaid-svg-tOHUMyfMkoIwrDo3 .cluster-label span p{background-color:transparent;}#mermaid-svg-tOHUMyfMkoIwrDo3 .label text,#mermaid-svg-tOHUMyfMkoIwrDo3 span{fill:#333;color:#333;}#mermaid-svg-tOHUMyfMkoIwrDo3 .node rect,#mermaid-svg-tOHUMyfMkoIwrDo3 .node circle,#mermaid-svg-tOHUMyfMkoIwrDo3 .node ellipse,#mermaid-svg-tOHUMyfMkoIwrDo3 .node polygon,#mermaid-svg-tOHUMyfMkoIwrDo3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tOHUMyfMkoIwrDo3 .rough-node .label text,#mermaid-svg-tOHUMyfMkoIwrDo3 .node .label text,#mermaid-svg-tOHUMyfMkoIwrDo3 .image-shape .label,#mermaid-svg-tOHUMyfMkoIwrDo3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-tOHUMyfMkoIwrDo3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tOHUMyfMkoIwrDo3 .rough-node .label,#mermaid-svg-tOHUMyfMkoIwrDo3 .node .label,#mermaid-svg-tOHUMyfMkoIwrDo3 .image-shape .label,#mermaid-svg-tOHUMyfMkoIwrDo3 .icon-shape .label{text-align:center;}#mermaid-svg-tOHUMyfMkoIwrDo3 .node.clickable{cursor:pointer;}#mermaid-svg-tOHUMyfMkoIwrDo3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tOHUMyfMkoIwrDo3 .arrowheadPath{fill:#333333;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tOHUMyfMkoIwrDo3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tOHUMyfMkoIwrDo3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tOHUMyfMkoIwrDo3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tOHUMyfMkoIwrDo3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tOHUMyfMkoIwrDo3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tOHUMyfMkoIwrDo3 .cluster text{fill:#333;}#mermaid-svg-tOHUMyfMkoIwrDo3 .cluster span{color:#333;}#mermaid-svg-tOHUMyfMkoIwrDo3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tOHUMyfMkoIwrDo3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tOHUMyfMkoIwrDo3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-tOHUMyfMkoIwrDo3 .icon-shape,#mermaid-svg-tOHUMyfMkoIwrDo3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tOHUMyfMkoIwrDo3 .icon-shape p,#mermaid-svg-tOHUMyfMkoIwrDo3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tOHUMyfMkoIwrDo3 .icon-shape .label rect,#mermaid-svg-tOHUMyfMkoIwrDo3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tOHUMyfMkoIwrDo3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tOHUMyfMkoIwrDo3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tOHUMyfMkoIwrDo3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} hy-app
UI 组件
开发规范
AI 能力
移动端 UI
业务组件
Hooks
TypeScript
Theme
i18n
MCP
llms
Skills
Vue 3 + uni-app
跨端应用
因此,hy-app 的价值不仅在于有多少组件 还在于这些组件能不能被开发者和 AI 正确理解、正确调用、正确维护

十五、快速开始
安装组件
bash
npm install @hy-app/ui
安装MCP
bash
# 全局安装
npm install -g @hy-app/mcp
# 或使用 npx(无需安装)
npx @hy-app/mcp
trae编辑器配置mcp工具
json
{
"mcpServers": {
"hy-app": {
"command": "npx",
"args": ["@hy-app/mcp"]
}
}
}
安装skills
bash
pnpm dlx skills add hy‑uniapp/skills
# or
npx skills add hy-uniapp/skills
官方资源: