# 开发指南
本指南将帮助您了解 Shadow UI 组件库的开发流程和规范,以便您能够更好地参与到 Shadow UI 的开发中来。
# 目录结构
Shadow UI 组件库采用模块化设计,目录结构清晰,便于维护和扩展:
uni_modules/shadow-ui/
├── components/ # 核心组件
├── static/ # 样式和静态资源
├── libs/ # 核心库
├── utils/ # 工具函数
└── index.js # 框架入口
# 目录说明
- components/:存放所有 UI 组件,每个组件一个目录,包含组件的 Vue 文件、样式文件和 props 定义文件
- static/:存放框架的样式文件、图标字体和其他静态资源
- libs/:存放框架的核心功能库,如事件总线、混入等
- utils/:存放工具函数,如城市选择、日期处理等
- index.js:框架的入口文件,用于注册所有组件
# 组件开发规范
# 组件命名
- 组件名称使用
ui-前缀(例如ui-button) - 组件目录名称与组件名称保持一致
- 避免使用过于复杂或模糊的名称
# 组件结构
每个组件应包含以下文件:
ui-component-name/
├── ui-component-name.vue # 组件的 Vue 文件
├── style.scss # 组件的样式文件
└── props.js # 组件的 props 定义文件(可选)
# 代码风格
- 使用 Vue 3 的 Composition API 和
<script setup>语法(新项目) - CSS 类名遵循 BEM 命名规范
- 确保组件的跨平台兼容性
- 提供完整的 props、events 和 slots
- 编写清晰的文档和使用示例
# BEM 命名规范
BEM(Block, Element, Modifier)是一种 CSS 命名规范,用于保持 CSS 代码的清晰性和可维护性:
/* Block */
.ui-button {
/* 块样式 */
}
/* Element */
.ui-button__icon {
/* 元素样式 */
}
/* Modifier */
.ui-button--primary {
/* 修饰符样式 */
}
# Props 设计
- 为每个 prop 提供清晰的类型定义
- 为必填 prop 添加
required: true - 为每个 prop 提供合理的默认值
- 避免使用过于复杂的 prop 结构
# Events 设计
- 使用 kebab-case 命名事件(例如
update:model-value) - 为事件提供清晰的描述
- 传递必要的参数
# Slots 设计
- 为默认插槽提供合理的默认内容
- 为命名插槽提供清晰的描述
- 避免使用过多的命名插槽
# 跨平台兼容性
Shadow UI 组件库需要支持 H5、小程序和 APP 多平台,因此在开发组件时需要注意以下几点:
- 避免使用平台特定的 API
- 使用 uni-app 提供的跨平台 API
- 注意不同平台的样式差异
- 进行充分的跨平台测试
# 样式兼容性
- 使用 flex 布局,避免使用 table 布局
- 避免使用 CSS 变量(在某些旧版小程序中不支持)
- 注意单位转换,使用 rpx 作为主要单位
- 避免使用复杂的 CSS 选择器
# API 兼容性
- 使用 uni-app 提供的跨平台 API,如
uni.request、uni.navigateTo等 - 避免使用浏览器特定的 API,如
window、document等 - 避免使用 Node.js 特定的 API
# 组件开发流程
- 需求分析:明确组件的功能和使用场景
- 设计:设计组件的 API、样式和交互
- 开发:按照规范开发组件
- 测试:在不同平台上测试组件
- 文档:编写组件的文档和示例
- 提交:提交代码并进行代码审查
# 测试
# 本地开发
- 克隆仓库
- 安装依赖:
npm install - 运行开发服务器:
npm run dev:h5(针对 H5) - 打开浏览器并导航到提供的 URL
# 平台测试
- H5:使用浏览器开发者工具进行测试
- 小程序:使用各自的小程序开发工具
- APP:使用 uni-app 调试器或物理设备
# 测试重点
- 组件的基本功能是否正常
- 组件的样式是否符合设计要求
- 组件的交互是否流畅
- 组件的性能是否良好
- 组件在不同平台上的表现是否一致
# 贡献指南
欢迎提交 Issue 和 Pull Request 来帮助改进 Shadow UI 组件库。
# 开发流程
- Fork 仓库
- 创建功能分支
- 提交修改
- 提交 Pull Request
# 提交信息规范
提交信息应遵循以下格式:
<类型>: <简要描述>
<详细说明>(可选)
<相关 issue>(可选)
类型包括:
- feat: 添加新功能
- fix: 修复 bug
- docs: 更新文档
- style: 代码风格修改
- refactor: 代码重构
- test: 添加或更新测试
- chore: 构建或工具配置修改
# 代码审查
- 代码审查将检查代码的质量、风格和功能
- 请确保代码符合项目的规范和要求
- 请提供清晰的提交信息和修改说明
# 版本控制
我们使用语义化版本控制:
- MAJOR 版本:不兼容的 API 变更
- MINOR 版本:向后兼容的新功能
- PATCH 版本:向后兼容的 bug 修复
# 发布流程
- 更新组件库的版本号
- 更新 CHANGELOG.md
- 提交代码
- 发布到 npm 或其他平台
# 常见问题
# 如何添加新组件?
- 在
components/目录下创建新的组件目录 - 创建组件的 Vue 文件、样式文件和 props 定义文件
- 在
index.js中注册新组件 - 编写组件的文档和示例
- 测试组件的功能和兼容性
# 如何修改现有组件?
- 充分理解要修改的组件的功能和实现
- 在本地环境中进行修改和测试
- 确保修改不会破坏现有功能
- 提交修改并进行代码审查
# 如何调试组件?
- 使用浏览器开发者工具调试 H5 版本
- 使用小程序开发工具调试小程序版本
- 使用 uni-app 调试器调试 APP 版本
# 技术依赖
Shadow UI 项目使用了以下开源库:
- async-validator (opens new window) - 表单验证库
- xe-utils (opens new window) - 实用工具库
- luch-request (opens new window) - 网络请求库
- p-limit (opens new window) - 限制并发数量库
# 注意事项
- 部分版本的小程序不支持使用 text 标签作为图标容器
- 页面的背景色样式不能使用
scoped修饰符,否则在小程序中可能不生效 - 使用组件时,请确保传入的 props 类型正确
- 对于需要异步加载数据的组件,请确保在数据加载完成后再渲染组件