lily7129 / ui-libraries

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Lcap UI

CodeWave Low Code AI Platform UI Components

Get Start

此仓库使用 pnpm 来进行包管理, 强制要求使用 node >= v18.17.0

pnpm install

pnpm start

仓库目录介绍

全局仓库目录

|-- lcap-ui
|---- libraries                         // ui 库
|------ pc-ui                           // PC 端 UI 库(Vue2.6 CloudUI)
|------ mobile-ui                       // Mobile 端 UI 库(Vue2.6 vant)
|------ pc-react-ui                     // PC 端 UI 库(React AntD)
|------ mobile-react-ui                 // Mobile 端 UI 库 (React) (待规划)
|---- packages                          // 其他工具库
|------ cli                             // 工程命令相关库
|------ validator                       // 表单验证库 【待规划】
|------ ...                             // 其他公共依赖
|------ package.json                    // 项目文件,version 跟随ide 版本,

组件库仓库

|-- pc-ui
|-- .storybook                       // storybook 配置
|---- main.js
|---- preview.js
|-- src
|---- components                     // 组件目录
|---- styles                         // 样式相关目录,例如 normalize.css, 主题变量文件
|---- index.ts                       // 打包入口文件
|-- test                             // 测试代码
|---- coverage                       // 单测覆盖率文件(不提交)
|---- setup.js                       // 单元测试启动文件
|-- lcap-ui.config.js                // 组件打包配置 (向IDE 输出组件配置)
|-- package.json                     // 组件库项目文件 名称 @lcap/pc-ui
|-- vite.config.js                   // vite 开发、构建、测试 配置文件
|-- tsconfig.json                    // Typescript 配置文件
|-- tsconfig.api.json                // api.ts 编译配置文件
  • 组件仓库名称规范: [端]-[框架]-ui , 目前vue2.6 是默认框架,所以 直接是 pc-ui mobile-ui
  • 示例给出标准组件库仓库,目前有的仓库并不是这个结构,后续会逐步向标准靠拢;
  • lcap-ui.config.js 主要配置与ide 内容构建(主题变量、组件配置描述)
  • 仓库使用 vite + storybook 作为 开发 & 构建方案,后面内容过多,打包时间 > 3min 后,考虑使用 rspack 做构建;

Git 流程管理

分支描述

分支名称 用途描述
master 主分支,与线上最新版本代码保持一致,只运行同步release 相关操作更新代码;
develop 开发分支, 包含下个迭代所有的feature 代码;提交功能迭代PR 都合并到这个分支;
release/vx.x.x 功能迭代发布,发版本之前从develop checkout 出来分支,发布之后合并代码到 master 和 develop 分支, 生成 tag 。 vx.x 版本跟随ide版本,例如: release/v3.7.3 release/v3.7.3-1
hotfix/vx.x.x bug fix 迭代发布分支, tag/x.x.x checkout出分支,用于修复某个分支版本的问题, 发布之后合并代码到 master 和 develop 分支, 生成 tag 。vx.x 版本跟随ide版本,例如: release/v3.7.3 release/v3.7.3-1
feature/xxx 功能开发分支, 每个功能创建一个分支, 合并到 develop 分支, 合并之后删除
fix/xxx 修复bug 分支,从 hotfix/release 创建,也 pr 到hotfix分支每个组件的bug,单独创建一个分支, 合并之后删除
ci/xxx 工程代码更新或bugfix, 从develop分支创建,合并到develop分支
next 大版本更新时分支,最后会替换 master 分支
old 大版本更新时,旧版本master代码更新成old,或者是版本号 1.x, 0.x 等

提交规范

pnpm commit

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

由三个字段组成:type(必需)、scope(可选)、subject(必需)

Type

type 必须是下面的其中之一:

  • feat: 增加新功能
  • fix: 修复 bug
  • docs: 只改动了文档相关的内容
  • style: 不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
  • refactor: 代码重构时使用,既不是新增功能也不是代码的bud修复
  • perf: 提高性能的修改
  • test: 添加或修改测试代码
  • build: 构建工具或者外部依赖包的修改,比如更新依赖包的版本
  • ci: 持续集成的配置文件或者脚本的修改
  • chore: 杂项,其他不需要修改源代码或不需要修改测试代码的修改
  • revert: 撤销某次提交

Scope

用于说明本次提交的影响范围。scope 依据项目而定,例如在业务项目中可以依据菜单或者功能模块划分,如果是组件库开发,则可以依据组件划分, 例如:feat(Button): fix(Button):

Subject

主题包含对更改的简洁描述, 注意三点:

  1. 使用祈使语气,现在时,比如使用 "change" 而不是 "changed" 或者 ”changes“
  2. 第一个字母不要大写
  3. 末尾不要以.结尾

Body

主要包含对主题的进一步描述,同样的,应该使用祈使语气,包含本次修改的动机并将其与之前的行为进行对比。

Footer

包含此次提交有关重大更改的信息,引用此次提交关闭的issue地址,如果代码的提交是不兼容变更或关闭缺陷,则Footer必需,否则可以省略。

组件构成

Untitled

组件目录

|-- Button
|---- stories
|------ block.stories.ts                      // 代码区块示例
|------ Button.stories.ts                     // 组件开发调试demo
|---- tests
|------ fixes                                 // 修复bug时的单测代码
|------ features                              // 有功能增加时每个功能新增单测
|------ Button.test.ts                        // 组件测试代码
|---- api.ts                                  // 组件描述文件
|---- Button.tsx                              // 对原组件(antd, vant..)的扩展
|---- index.ts                                // 组件导出文件

开发流程

graph LR
  checkout --> 开发组件需求 --> 规范化commit
  checkout --> 编写stories --> 规范化commit
  checkout --> 编写测试代码 --> 规范化commit
  规范化commit --> 提交PR --> 自动化测试 --> 合并代码
  提交PR --> CodeReview --> 合并代码
Loading

组件开发

UI组件开发

插件化扩展功能 & IDE 适配

api.ts 组件描述文件编写

编写stories

调试 demo 编写

How to write stories • Storybook docs

block.stories.jsx

import React from 'react';
import Select, { SelectOption } from '../index';

export default {
  title: 'Example/Select/blocks',
  component: Select,
};

// React
export const defaultUse = {
	name: '基础用法',
  render: () => {
    return (
      <Select style={{ width: 256 }} placeholder="请选择">
        <SelectOption key="1" label="1" value="1" />
        <SelectOption key="2" label="2" value="2" disabled />
      </Select>
    );
  },
};

// Vue
export const defaultUse = {
	name: '基础用法',
	render: () => {
		return {
			template: `
<cw-select style="width: 256px;" placeholder="请选择" >
	<cw-select-option label="1" value="1" />
	<cw-select-option label="2" value="2" />
</cw-select>
`
		};
	};
};
  • 每个demo 必需写 namerender 参数;
  • 不要用 args 来驱动组件渲染;

编写测试代码

UI 渲染测试

  • 对已有组件封装时,无需写基础的渲染测试
  • 针对组件每种状态进行渲染测试,生成 snapshot
import React from 'react';
import { expect, test } from 'vitest';
import renderer from 'react-test-renderer';
import { Button } from 'antd';

test('Render Default Button', () => {
  const wrapper = renderer.create(<Button />);
  expect(wrapper.toJSON()).toMatchSnapshot();
});

test('Render Primary Button', () => {
  const wrapper = renderer.create(<Button type="primary" />);
  expect(wrapper.toJSON()).toMatchSnapshot();
});

// ...

功能测试

针对api.ts 对外暴露的参数进行功能交互测试, 例如: 按钮点击,选择框选中, 数据源加载等等;

贡献指南

修改代码请阅读我们的 贡献指南

资源

About


Languages

Language:Vue 39.4%Language:JavaScript 29.5%Language:TypeScript 21.6%Language:CSS 7.1%Language:Less 2.4%Language:HTML 0.0%Language:Shell 0.0%