你好,我是 Kagol,个人公众号:前端开源星球。
我要做开源第一季给大家分享了如何快速了解一个开源项目,从而决定自己是否参与其中。
除了看文档之外,最重要的就是亲自用一用这个开源项目。
在 Vue2 和 Vue3 项目中都可以使用 OpenTiny
我们了解到 OpenTiny 支持一套代码同时支持 Vue2 和 Vue3。
这到底意味着什么呢?亲自使用下就知道啦。
我们先用 Vue CLI 工具创建一个 Vue2 项目,然后安装 @opentiny/vue@2,在其中的 App.vue 文件中引入和使用 OpenTiny 的组件。
vue create vue2-demo
npm i @opentiny/vue@2
import { Button } from '@opentiny/vue'
<tiny-button>OpenTiny</tiny-button>
接着我们再用 Vite 创建一个 Vue3 的工程,安装 @opentiny/vue@3,同样在App.vue 文件中引入和使用 OpenTiny 的组件。
npm create vite
npm i @opentiny/vue@3
import { Button as TinyButton } from '@opentiny/vue'
<tiny-button>OpenTiny</tiny-button>
可以看到组件的使用方式是完全一样的,只需要改个 @opentiny/vue 依赖包的版本号。
这意味着什么呢?
假如我们有一个 Vue2 的项目,使用了 OpenTiny 组件库,而 Vue2 即将在年底不再维护,这时我们势必要升级 Vue3,升级完 Vue3,使用组件的那部分代码是不需要做任何改动的。
如果你之前的 Vue2 项目用的不是 OpenTiny,而是 ElementUI,情况会是怎样的呢?你除了需要将 Vue2 项目升级为 Vue3,还需要将使用 ElementUI 组件库的地方改成 Element Plus 组件库,由于仅支持 Vue2 的 ElementUI 几乎不怎么维护了,而支持 Vue3 的 Element Plus 则一直在持续更新,两边很有可能出现组件功能和 API 的不一致,这是将会造成很大的切换成本。
而 OpenTiny 由于是同一套代码,既支持 Vue2,也支持 Vue3,永远不存在组件功能和 API 不一致的情况,业务可以平滑切换。
OpenTiny 采用 renderless 无渲染组件的设计架构,实现一套代码同时支持 Vue2 / Vue3
作为一位对技术充满好奇的程序员,我们在使用开源项目的时候,很自然会去想:
这是怎么做到的呢?秘密就藏在源码里。
我们来看下项目的目录结构,其中最核心的就是 packages 子包目录,这个目录主要包含以下关键子目录:
- renderless:组件逻辑层,这是框架无关的部分,里面封装了组件的数据和方法
- vue :组件模板层,每个框架需要有一套模板,因为不同框架的模板语法不同
- theme :组件样式层,这也是框架无关的,组件样式并不是写死的,而是抽成了CSS变量,方便主题定制
- vue-common:框架适配层,实现跨框架的关键,每个框架需要有一套适配层
OpenTiny 采用组件与框架分离的设计理念(Renderless 架构),将组件拆分为三个构成部分:组件模板、组件样式和组件逻辑,并针对 Vue2 和 Vue3 实现了一个版本适配器,抹平 Vue2 和 Vue3 的差异,从而实现一套代码同时支持 Vue2 和 Vue3。
后续我会和村长一起给大家详细解析其中的原理。
参与实际的贡献
讲了这么多,大家也仅仅停留在知道的层面,要把它变成自己的东西,还得亲自写点代码,参与到 OpenTiny 的实际贡献中来。
参与贡献之前可以仔细阅读下我们精心编写的贡献指南:
也可以添加小助手微信:opentiny-official,加入我们的技术交流群,一起学习和成长!
本期我要做开源的视频录播地址:www.bilibili.com/video/BV1ek…
欢迎关注村长直播间:live.bilibili.com/22531545
每周五晚八点给大家解析 OpenTiny 跨端、跨框架 UI 组件库,并带大家走进开源世界。
联系我们
GitHub:github.com/opentiny/ti…(欢迎 Star ⭐)
B站:space.bilibili.com/15284299
小助手微信:opentiny-official
公众号:OpenTiny