💻新组件贡献参考:RFC 骨架屏组件 #1334
Replies: 8 comments 3 replies
-
目前TinyVue一共有三套内置模板:
一个组件可以同时有3套模板,视需求而定,有些组件只有pc模板,有些只有mobile模板,有些两种模板都有,也有些有mobile-first模板。 拿 Skeleton 组件为例,由于 skeleton 组件每个 item 的长度都是占父元素的百分之多少,所以不需要写mobile和mobile-first模板,天然就是自适应屏幕的。 |
Beta Was this translation helpful? Give feedback.
-
theme 子包用来存放 PC 端组件的样式和主题,theme-mobile 用来存放移动端组件的样式和主题。 Skeleton 只有 pc 模板,所以它的样式写在 theme 子包中,不需要在 theme-mobile 写样式,因为它没有 mobile 模板。 |
Beta Was this translation helpful? Give feedback.
-
关于依赖现状使用组件库脚手架创建的组件,版本号有误,且缺少以下相关依赖: {
"name": "@opentiny/vue-[[NAME]]",
"version": "5.[[MINOR]].0", // 版本号为 5.x.0,而目前组件库只有 3.x.x
"description": "",
"main": "lib/index.js",
"module": "index.ts",
"sideEffects": false,
"type": "module",
"dependencies": {
"@opentiny/vue-renderless": "~5.[[MINOR]].0",
"@opentiny/vue-theme": "~5.[[MINOR]].0",
"@opentiny/vue-common": "~5.[[MINOR]].0"
},
"license": "MIT"
}
"@opentiny/new-conponent": "workspace:~", // packages/vue/package.json
"devDependencies": {
"@opentiny-internal/vue-test-utils": "workspace:*",
"vitest": "^0.31.0"
}, 所以需要手动添加和 执行 |
Beta Was this translation helpful? Give feedback.
-
对于 创建新组件模板后,脚手架是否自动安装依赖/用户手动执行 pnpm add xxx 需要讨论。 我觉得不需要自动执行 pnpm add xxx,因为 pnpm create:ui 的定位是创建空的组件模板,除了这个职责之外的其他职责都不应该承担。 |
Beta Was this translation helpful? Give feedback.
-
@zzcr 可以回答下 |
Beta Was this translation helpful? Give feedback.
-
目前不支持这个功能,感兴趣可以参加贡献。 |
Beta Was this translation helpful? Give feedback.
-
这两个问题都是 create:ui 脚本不完善导致的,可以先优化下这个脚本。能通过脚本添加的话,尽量通过脚本添加。 |
Beta Was this translation helpful? Give feedback.
-
可以先凭自己感觉编写E2E测试用例和单元测试用例,后续可以考虑Playwright和vitest有没有什么工具可以测试覆盖率。 |
Beta Was this translation helpful? Give feedback.
-
背景及需求
相关issue:✨ [Feature]: Please provide Skeleton component
现有类似开源组件调研
预期效果
Skeleton
Skeleton-item
补充: 实际效果
实现方案
参考文档:
GaoNeng:我是如何为OpenTiny贡献新组件的?
【我要做开源】OpenTiny开源指南02:适配多组件库的原理剖析
⚠opentiny组件库好像重构了,上述参考文档有出入。
组件设计
skeleton组件比较简单,且不涉及一些事件交互:
关于 pc端 和 移动端:skeleton组件每个 item 的长度都是占父元素的百分之多少,所以不需要写 移动端模板
组件开发
step1: 组件模板+样式+交互逻辑
模板
首先执行命令
pnpm create:ui skeleton
、pnpm create:ui skeleton-item
,此时pakcages/vue
文件夹下出现对应模板。样式
theme文件夹:创建对应组件的 样式:index.less 和 vars.less(变量文件),命名规范参考:样式开发指南1、主题变量的命名规则,样式开发指南2、index.less的编写注意事项
BEM规范 :
.block
、.block-name
.block__element
、.block-name__element-name
.block--modifier
、.block__element--modifier
、.block-name__element-name--modifier
命名约定:在使用BEM时,建议遵循以下命名约定:
摘自 [干货]-BEM国际命名规范 +美团订单模块实战!!小白必学! - 掘金
renderless
renderless文件夹:相当于 vue 的 <script/>,在这里定义一些 state、watch、computed
💡state 需要在模板中直接使用,不需要导入,eg:
<div :class="state.active ? 'active': ''" />
这里可以参考 GaoNeng 的 文章:renderless - 组件逻辑开发
Unit test
使用命令行创建的组件模板中是没有 测试相关的依赖的,
所以需要手动安装 @opentiny-internal/vue-test-utils 和 vitest
安装完成后,
skeleton/packages.json
中会新增下面的内容如何编写 ut ?
命令行中执行
pnpm test:unit3 skeleton
参考:前端Vuer,请收好这份《Vue组件单元测试》宝典,给自己多一些安全感 - 掘金
step2: 效果预览
组件注册:
如果注册之后,执行 pnpm run dev打开本地预览,此时报错找不到组件,那还是组件没有注册成功
举一个例子:
step3:添加官网 e2e 测试 + 选项/组合式api
相关文档:
组件 demo 和 api 文档编写规范
E2E测试用例编写贡献指南
选项式:base-usage.vue
组合式:base-usage-composition-api.vue
e2e测试
推荐使用 vscode 插件测试,但是我新增的组件在 vscode测试目录中找不到。
所以改用执行命令测试:pnpm run test:e2e3 skeleton
⚠执行测试命令之前需要打开官网(执行 pnpm run site)
step4:添加 ts 类型声明
renderless/types 文件夹中增加对应组件的xx.type.ts
添加的主要内容:
Q&A
mobile 和 mobile-first 有什么区别呢,里面只有部分组件?
theme-mobile 文件夹是干什么的,目前所有样式写在 mobile 中?
$constants 是什么用呢?
在 pr 合并之前,如何在线预览新增组件?
可以使用 surge 或者 vercel,貌似 vercel 更方便。
eg: feat(index-bar): support anchor name slot varletjs/varlet#1400
我自己写的组件,packages/vue/package.json中没有出现自动引入,我应该怎么做呢,参考:https://github.com/opentiny/tiny-vue/pull/471/files#diff-689b8ca0de6e456621f03976b3e1b483506098bcc36dcc6219554cdbf6b2d5d6
我需要自己手动添加吗?还是等 pr 合并了,opentiny的内部工作人员处理
Beta Was this translation helpful? Give feedback.
All reactions