参与开源之夏 x OpenTiny 跨端跨框架 UI 组件库贡献,可以赢取奖金🏆!这份《OpenTiny 开源贡献指南》请收好🎁!
大家好,我是 Kagol。
近期有几位朋友在 OpenTiny 技术交流群里询问我们在开源之夏(OSPP)的项目,希望能提前做一些准备工作。
这里给大家简单介绍下开源之夏。
开源之夏是由中科院软件所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,培养和发掘更多优秀的开发者,促进优秀开源软件社区的蓬勃发展,助力开源软件供应链建设。
开源之夏联合国内外开源社区,针对重要开源软件的开发与维护提供项目任务,面向全球高校学生开放报名,中选学生将在项目资深开发者(项目导师)的指导下,参与开源贡献,完成开发工作并贡献给开源社区。
参与开源之夏,你可以:
- 零距离体验顶级开源项目
- 跟着技术大牛提升研发能力
- 用成果赢取丰厚奖金和证书(基础项目 8000 奖金 / 进阶项目 12000 奖金)
开源之夏:https://summer-ospp.ac.cn/
OpenTiny 开源之夏项目:https://summer-ospp.ac.cn/org/orgdetail/36ed1f70-33b1-47c2-a63c-d3faea6b73fc
以下是开源之夏的活动流程
我能提前做哪些准备呢
大家最关心的两个问题是:
- 我能参与 OpenTiny 的什么项目
- 为了更好地完成项目,我能提前做哪些准备工作
OpenTiny 的开源之夏项目目前正在紧锣密鼓地筹备当中,预计下周将发布出来。
在这之前,大家可以做以下准备:
- 了解 Git 使用和开源贡献基本流程
- 加入 OpenTiny 社区,熟悉 OpenTiny 项目
- 通过解决一些小问题和实现一些简单的需求,提前了解 OpenTiny 开发流程、项目结构、实现原理
OpenTiny 基本介绍
OpenTiny 是一套华为云出品的企业级 UI 组件库解决方案,适配 PC 端 / 移动端等多端,涵盖 Vue2 / Vue3 / Angular 多技术栈,拥有主题配置系统 / 中后台模板 / CLI 命令行等效率提升工具,可帮助开发者高效开发 Web 应用。
它主要有以下亮点特色:
- TinyVue:一套代码同时支持 Vue2 / Vue3,支持 PC / Mobile
- 包含 80 多个功能丰富的组件,并提供多个实用的特色组件
- TinyNG:提供 Angular 组件库
- TinyPro:提供开箱即用的中后台模板
- TinyCLI:提供覆盖前端开发全流程的 CLI 工具
- TinyTheme:提供一款让你的 Web 应用风格更多变的主题配置系统
参考:
- 一个 OpenTiny,Vue2 Vue3 都支持!
- OpenTiny 的这些特色组件,很实用,但你应该没见过
- 这个 OpenTiny 开源项目的 CLI 可太牛了,两行命令创建一个美观大气的 Vue Admin 后台管理系统,有手就会,连我的设计师朋友都学会啦啦
- 历史性的时刻!OpenTiny 跨端、跨框架组件库正式升级 TypeScript,10 万行代码重获新生!
OpenTiny 基本使用
了解一个开源项目最好的方式就是用用看,感受下这个项目能干什么。
假设你已经有了一个 Vue3 项目
npm i @opentiny/vue@3
App.vue 中引入和使用组件
<script setup lang="ts">
// 1. 引入 TinyVue 组件
import { Button, Alert } from '@opentiny/vue'
</script>
<template>
<!-- 2. 使用 TinyVue 组件 -->
<Button>OpenTiny</Button>
<Alert description="Hello OpenTiny"></Alert>
</template>
参考:
OpenTiny 其他开源项目的使用可以参考相应的文档:
启动 OpenTiny 项目
要想参与开源项目贡献,就必须先把项目在本地启动起来,才能进行代码调试。
还是以 TinyVue 为例
pnpm i
pnpm dev
参考:
OpenTiny 其他项目请参考相应的贡献指南文档:
OpenTiny 目录结构和基本原理
能把项目启动起来,只是参与贡献的起步阶段,等于是迈出了第一步,接下来就需要花很长的时间熟悉项目,并通过持续解决问题深入项目,从而为后续参与更大的贡献打好坚实的基础。
我们来看下 TinyVue 项目的基本目录结构。
├── packages // 核心子包
| ├── renderless // 组件逻辑层
| ├── theme // PC 组件样式
| ├── theme-mobile // Mobile 组件样式
| ├── vue // Vue 组件模板层
| ├── vue-common // 公共适配层,实现跨框架的核心
| ├── vue-icon // 图标
| └── vue-locale // 国际化
├── examples // 组件 demo / api 文档
| ├── docs
├── internals // 内部构建、发布脚本,配套插件,项目规范
| ├── cli // 构建、发布脚本
| ├── playwright-config // 集成测试
| ├── unplugin-virtual-template // 虚拟模板插件
| ├── vue-test-utils // 单元测试
| └── vue-vite-import // 按需引入插件
├── pnpm-workspace.yaml
├── tsconfig.json
├── CHANGELOG.md
├── CONTRIBUTING.md
├── CONTRIBUTING.zh-CN.md
├── LICENSE
├── README.md
├── README.zh-CN.md
└── package.json
其中最核心的就是 packages 子包目录,这个目录主要包含以下关键子目录:
- renderless:组件逻辑层,这是框架无关的部分,里面封装了组件的数据和方法
- vue :组件模板层,每个框架需要有一套模板,因为不同框架的模板语法不同
- theme :组件样式层,这也是框架无关的,组件样式并不是写死的,而是抽成了CSS变量,方便主题定制
- vue-common:框架适配层,实现跨框架的关键,每个框架需要有一套适配层
OpenTiny 采用组件与框架分离的设计理念(Renderless 架构),将组件拆分为三个构成部分:组件模板、组件样式和组件逻辑,并针对 Vue2 和 Vue3 实现了一个版本适配器,抹平 Vue2 和 Vue3 的差异,从而实现一套代码同时支持 Vue2 和 Vue3。
这样不管是 Vue2 项目还是 Vue3 项目,使用组件的方式都是一样的,可以实现无缝切换,可以极大地降低 Vue2 迁移到 Vue3 的成本和风险。
如何解决 Issue,参与实际贡献
知道得再多,不实际写点代码,参与实际的贡献,终究还是停留在纸面上,只有解决开源项目的实际用户问题,才能不断积累开源贡献经验,为开源项目创造价值。
我们以两个实际的 Issue 为例,一个是 bug,一个是新特性,带大家一起通过解决 Issue 积累开源贡献经验。
解决问题三部曲:
- 复现它
- 找到它
- 解决它
先来看第一个问题,先理解这个问题,并复现出来。
这个问题很容易复现,使用 TinyLine 组件时,配置以下 settings 不生效。
<template>
<tiny-line ... :settings="settings"></tiny-line>
</template>
<script>
const settings = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
// not work
lineStyle: {
color: '#ffa147',
width: 2,
type: 'dashed'
}
}
}
}
</script>
问题复现之后,就是定位问题,找到问题的根因。
经过一番调试,最终发现 getLineTooltip 方法将 tooltip 属性都过滤掉了,只保留了 formatter / trigger 两个属性。所以用户配置 axisPointer
这个属性自然就是不生效的。
代码:chart-line/index.ts#L138 getLineTooltip
问题根因找到之后,就是寻找解决方案啦。
最终解决的方法是将经过内部封装和处理的 ECharts options 属性后面加一层用户传入的 settings 属性覆盖。
return options
->
return { ...options, ...settings }
最终解决的 PR:
另一个 Issue 解决的思路也是一样的,就不再赘述,最终解决的 PR 如下:
欢迎添加小助手微信:opentiny-official 不迷路,我们每周五20点会在村长直播间,与大家分享 OpenTiny 开源项目的更多内容,与大家一起成长!
总结
本文主要手把手教大家参与 OpenTiny 开源项目。
从阅读项目的 README 文档了解项目是什么,到尝试使用 OpenTiny,再到通过阅读贡献指南文档,将项目启动起来,再到介绍 OpenTiny 项目目录和基本原理,最后是通过带大家分析和解决项目中实际的用户问题,走完整个贡献的流程。
为大家后续参与 OpenTiny 更多贡献做一个指引和入门。
TinyVue 招募贡献者啦
如果你对我们的跨端跨框架组件库 TinyVue 感兴趣,欢迎参与到我们的开源社区中来,一起将它建设得更好!
参与 TinyVue 组件库建设,你将收获:
直接的价值:
- 通过打造一个跨端、跨框架的组件库项目,学习最新的
Monorepo
+Vite
+Vue3
+TypeScript
技术 - 学习从 0 到 1 搭建一个自己的组件库的整套流程和方法论,包括组件库工程化、组件的设计和开发等
- 为自己的简历和职业生涯添彩,参与过优秀的开源项目,这本身就是受面试官青睐的亮点
- 结识一群优秀的、热爱学习、热爱开源的小伙伴,大家一起打造一个伟大的产品
- 参与开源之夏,赢取丰厚奖金
长远的价值:
- 打造个人品牌,提升个人影响力
- 培养良好的编码习惯
- 获得华为云 OpenTiny 开源社区的荣誉&认可和定制小礼物
- 成为 PMC & Committer 之后还能参与 OpenTiny 整个开源生态的决策和长远规划,培养自己的管理和规划能力
未来有更多机会和可能
欢迎广大的开发者参与到我们 TinyVue 的开源项目中来
联系我们
如果你对我们 OpenTiny 的开源项目感兴趣,欢迎添加小助手微信:opentiny-official,拉你进群,一起交流前端技术,一起玩开源。
OpenTiny 官网:https://opentiny.design/
OpenTiny 仓库:https://github.com/opentiny/
Vue 组件库:https://github.com/opentiny/tiny-vue(欢迎 Star )
Angular 组件库:https://github.com/opentiny/ng(欢迎 Star )
CLI 工具:https://github.com/opentiny/tiny-cli(欢迎 Star )
往期文章推荐
- GitHub Pulse 是什么?它是否能衡量 OpenTiny 开源项目的健康程度?
- 历史性的时刻!OpenTiny 跨端、跨框架组件库正式升级 TypeScript,10 万行代码重获新生!
- OpenTiny 的这些特色组件,很实用,但你应该没见过
- 一个 OpenTiny,Vue2 Vue3 都支持!
- 这个 OpenTiny 开源项目的 CLI 可太牛了,两行命令创建一个美观大气的 Vue Admin 后台管理系统,有手就会,连我的设计师朋友都学会啦啦
- 老板:你为什么要选择 Vue?
参与开源之夏 x OpenTiny 跨端跨框架 UI 组件库贡献,可以赢取奖金🏆!这份《OpenTiny 开源贡献指南》请收好🎁!的更多相关文章
- 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...
- 【转】如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
网上看到关于微信官方的跨平台跨业务的终端基础组件Mars的介绍文章,转载这这里.源代码: https://github.com/Tencent/mars作者:男人链接:https://zhuanlan ...
- 移动端前端框架UI库
移动端前端框架UI库(Frozen UI.WeUI.SUI Mobile) Frozen UI 自述:简单易用,轻量快捷,为移动端服务的前端框架. 主页:http://frozenui.github. ...
- vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图
vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...
- 基于Svelte3.x桌面端UI组件库Svelte UI
Svelte-UI,一套基于svelte.js开发的桌面pc端ui组件库 最近一直忙于写svelte-ui,一套svelte3开发的桌面端ui组件库.在设计及功能上借鉴了element-ui组件库.所 ...
- Taro 3 正式版发布:开放式跨端跨框架解决方案
作者:凹凸曼 - yuche 从 Taro 第一个版本发布到现在,Taro 已经接受了来自于开源社区两年多的考验.今天我们很高兴地在党的生日发布 Taro 3(Taro Next)正式版,希望 Tar ...
- 移动端前端框架UI库(Frozen UI、WeUI、SUI Mobile)
Frozen UI 自述:简单易用,轻量快捷,为移动端服务的前端框架. 主页:http://frozenui.github.io/ 开发团队:QQVIP FD Team Github:https:// ...
- Webix快速跨浏览器的JavaScript UI组件
网址:http://webix.com/ 寥寥几行代码就将页面渲染出来了,确实值得一试!
- vux 是基于 WeUI 和Vue(2.x)开发的移动端UI组件库,主要服务于微信页面。
https://doc.vux.li/zh-CN/ https://vux.li/
- Weex Ui 是一个基于 Weex 的富交互、轻量级、高性能的移动端 UI 组件库
Github资源:https://github.com/alibaba/weex-ui 预览 你可以通过飞猪.淘宝.天猫.Weex Playground 或者浏览器扫码体验 安装 npm i weex ...
随机推荐
- Vue+SSM+Element-Ui实现前后端分离(2)
前言:后台使用ssm搭建,对以前学习知识的一个回顾,与此同时来发现自己不足.这里主要采用配置文件方式进行,有部分注解. 目标:搭建ssm框架,并测试成功:(其中也有aop切面的编写) 一.开发工具 I ...
- 003Java的诞生
003Java的诞生 1.计算机语言发展史 (1)第一代语言 机器语言 我们都知道计算机的基本计算方式都是基于二进制的方式. 二进制:010111001010110010110100 这种代码是直接输 ...
- 121、商城业务---订单服务---rabbitmq消息积压、丢失、重复等解决方案
- 记录下老dropbox的使用
32-bit: wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf - 64-bit: wget ...
- appium自动化时,automatic server里面desired capabilities的json representation设置
一点一点来,记号下: 大体格式如下: { "platformName": "Android", "platformVersion": &qu ...
- 狂神说SpringBoot笔记之编写一个http接口
编写一个http接口 1.1.在主程序的同级目录下,新建一个controller包,一定要在同级目录下,否则识别不到 2.代码 1 package com.example.app01.demo.api ...
- token解决cookie的弊端
token解决cookie的弊端 目录 token解决cookie的弊端 cookie的弊端 token解决弊端一 什么是token和JWT JWT的构成 token工作流程 token解决弊端二 C ...
- K8S 性能优化 - OS sysctl 调优
前言 K8S 性能优化系列文章,本文为第一篇:OS sysctl 性能优化参数最佳实践. 参数一览 sysctl 调优参数一览 # Kubernetes Settings vm.max_map_cou ...
- Activiti7开发(一)
0.前言 开发背景 项目开发设计审批工作流,企业微信的审批不错,但是下拉列表不支持后期添加,所以只能自己实现,通过gitee查找相关工作流的开源项目,参考有 闲鹿(RuoYi+Activiti6) h ...
- Jetson Xavier NX 试玩 (一)
Jetson Xavier NX 试玩 (一) 环境搭建 0 前言 NVIDIA家的Jetson系列是业内嵌入式边缘计算机的代表作,体积小,功能强是其最主要的优点. 学院入手了一款Jeston Xav ...