突然收到 GVP 入选弹窗的时候,我正在修一个 Douyin 小程序的 bug。
picker 组件弹不出来。查了两天,最后发现是 Douyin 的原生 picker-view 在创建时就要数据,而我们用了 async/await,数据异步加载导致 picker-view 创建时是空的。这种问题,不踩过根本想不到。
正头大着,GVP 的消息弹出来了。有点恍惚,但确实开心。
Gitee GVP ?
GVP 全称 Gitee Most Valuable Project,是 Gitee 对平台上优质开源项目的官方认证。评选标准包括代码质量、文档完善度、社区活跃度、项目的实用价值。
Gitee 目前有超过 800 万开发者。在这个体量下被官方认可为"最有价值开源项目",还挺有分量的(我自己觉得)。作为一个纯技术导向的组件库,能拿到这个 GVP,说明这套跨平台 UI 组件库还是有点用的。
从 uView UI 1.8.8 到 uView Pro
uView Pro 的前身是 uView UI 1.8.8。如果你在 2020 年前后用过 uni-app,大概率听说过 uView UI——当时的 uni-app 生态里,组件库选择不多,uView UI 靠 60 多个组件和还算完善的文档,积累了不少用户。
但技术栈是会过期的。
2022 年,Vue3 正式成为默认版本,uni-app 也全面拥抱 Vue3。uView UI 1.8.8 基于 Vue2 和 Options API 写的,升级到 Vue3 不是换个语法糖那么简单。Composition API 的逻辑组织方式完全不同,TypeScript 支持也得从头来。
当时有两个选择:缝缝补补做个兼容版本,还是推倒重来,市面上已经有了uView 2.x的ts兼容版本。
也是因为我只用过 uView UI 1.x 的版本,所有我选了后者。基于 1.8.8 的组件设计思路,用 Vue3 Composition API 全部重写,顺便把 TypeScript 支持、主题定制、暗黑模式这些 1.8.8 时代没做好的事情一并解决。
重构不是翻译代码。每个组件都得重新思考:API 设计尽量不改变、跨平台兼容性怎么处理、性能有没有优化空间。80 多个组件,只能一个一个过。
仓库前也给加上了 GVP 勋章,XiXi~
跨平台的坑真不少
跨平台开发最骗人的一句话就是"一套代码,多端运行"。
现实是,每个端都有自己的脾气。
微信小程序相对规范,但也有一些限制,比如不支持 CSS 变量在 style 属性中动态绑定,某些动画效果需要特殊处理。
App 端用的是 uni-app 的 App 渲染引擎,大部分组件行为和 H5 一致,但原生组件(如 picker-view、video、map)表现完全不同。
Douyin 小程序是坑最多的。它的底层和微信小程序不完全一样,很多微信上正常的东西,到 Douyin 上就不行。比如前面说的 picker 组件,Douyin 的原生 picker-view 必须在创建时就有数据,不能用异步方式填充。还有样式隔离机制、组件生命周期时序,都和微信有差异。
H5 端又是另一套逻辑。没有原生组件,全部用 Web 技术模拟,路由、存储、网络请求的底层实现都不一样。
举个例子,uView Pro 的 u-picker 组件,底层封装了 uni-app 的 picker-view。在微信小程序和 App 端、H5 端都不同。一套 API,四种实现,每次修一个端的问题,都得确认其他三个端不受影响。
类似的事情太多了。u-select 的弹窗在不同端的定位方式不一样,u-form 的校验在 Douyin 上有时序问题,u-tabs 的滑动在 App 端偶现卡顿…… 每个问题背后都是几小时甚至几天的排查。
但每解决一个,组件库就稳一分。
目前已经有 80 多个组件
目前 uView Pro 有 80 多个组件,覆盖了表单、导航、数据展示、反馈、布局等常见场景。全部基于 Vue3 Composition API 开发,TypeScript 类型支持,对 IDE 的代码提示友好。
组件数量不是核心指标,但 80 多个意味着大部分业务场景不用自己从零写 UI 了。一个登录页、一个商品列表、一个设置页面,uView Pro 基本都能覆盖。
除了组件,我们在 0.6.x 版本加了几个重要的东西:
深度主题定制:通过 u-config-provider 组件,可以全局配置多个主题色。暗黑模式也内置了,自动跟随系统或者手动切换。
内置虚拟根组件:0.6.12 版本通过 vite 插件自动注入根组件,不需要在 App.vue 里手动引入。这个功能对新手很友好,安装就能用,不用理解"根组件"是什么概念。
MCP支持:更好的为 AI 编辑器提供了基于 Model Context Protocol (MCP) 的组件文档查询服务,让 AI 能够实时获取最新的组件 API 信息。
skills支持:可以快速让 AI 理解 uView Pro 组件库的使用方式,标准化 AI 生成的代码质量,提升开发效率,减少重复工作。
社区
开源项目最怕的是没人用。但 uView Pro 从第一天起,就有开发者在提 Issue、给反馈、甚至直接贡献代码。
有些人会写特别详细的复现步骤,把环境信息、操作路径、截图、代码片段都贴上来,排查效率直接翻倍。还有一些人默默点 Star,平时不说话,但每次 Star 数涨的时候,都是对坚持开源的鼓励。
GVP 这个荣誉,属于整个 uView Pro 社区。没有那些反馈和贡献,uView Pro 可能走不到今天。
接下来
GVP 不是终点。接下来有几件事要推进:
平台兼容性:Douyin 小程序仍然有一些组件表现不够稳定,需要继续打磨。
AI完善:继续完善 skills,mcp 的准确度
uni-app x 支持:正在写 uView Pro 的 uni-app x 版本(这玩意太难写了)
最后
开源项目,最难的不是写代码,是坚持。
uView Pro 从萌生这个想法到现在,经历了无数个深夜改 bug 的时刻,也经历过被质疑"这个项目还能活多久"的阶段。但每次看到有人用 uView Pro 做出了产品,或者有人留言说"这个组件真好用",就觉得还能再撑一撑。
GVP 是个里程碑,但更重要的是,它让我确认了一件事:正在做的事情,有人认可,有价值。
如果你在用 uni-app 做跨平台开发,可以试试 uView Pro:
官网文档:uviewpro.cn
Gitee:gitee.com/anyup/uView…
如果觉得有用,顺手点个 Star。如果遇到问题或有好建议,欢迎来提 Issue(都会解决)。
uView Pro 从开源到 Gitee 推荐项目用了 1 个月,从 Gitee 推荐项目到 GVP 年度最具价值开源项目用了 8 个月,开源不容易,但好在坚持下来了,感谢大家的使用和支持~
开源不易,但有人同行,路就没那么难走!