2025年 8 月 6 日,uView Pro 的第一版代码首次开源,到今天正好一年时间。
当时还发了掘金:


这是一个 uni-app 的 TypeScript Vue3 组件库,拥有 80+ 高质量组件、丰富工具库、开箱即用模板。内置多主题、暗黑模式、国际化,可一键适配 H5/APP/鸿蒙/小程序
一年过去,我发现已经过一千星星了:Gitee 目前 506 个 star,GitHub 537 个 star,还拿到了 gitee 的 GVP 认证。


回头想想,这一年大部分业余时间都在闷头改代码、回 Issue、迭代新功能。今天想把这些成绩和背后的东西,摊开来聊一聊。
这一年攒下的成果
先报个账,截止现在,uView Pro 在 gitee 和 GitHub 两个平台加起来已经过千 star,npm 月下载量 3k ~ 8k+。

GVP 是什么?gitee 里最有价值的开源项目,评委是官方团队加社区专家组,uView Pro 有幸能拿到这个认证,算是行业对项目的一种背书?(反正我是十分开心的) 

组件数量上,我用 Vue3 + TS 重构完成 80+ 个组件,覆盖了日常开发里能想到的绝大部分场景,从按钮、表单这些基础件,到日历、上传、瀑布流这些复杂件都齐了。
兼容性上,安卓、iOS、鸿蒙、微信小程序、头条小程序、支付宝小程序这些主流端都跑得通,一套代码多端运行不是口号,是真在维护,不断进行优化。
去年有个事挺自豪:uView Pro 的鸿蒙端应用已经上架了华为应用市场,等于把组件库拿到真机上去验证了一遍,这比在文档里写"兼容鸿蒙"有说服力得多,为此还拿到了鸿蒙应用激励金。
参考掘金文章:uni-app 开发的鸿蒙应用上架后,竟然月入4000+
通过鸿蒙应用市场AppGallery,搜索uViewPro即可看到!
组件核心
单说组件数量,市面上不缺。uView Pro 能被人记住,靠的是快速解决、不断维护、功能的完备性。例如:组件库全面支持国际化、多主题、暗黑模式
国际化(i18n)并不是简单换文案,是整套组件库的语言体系都接进去了。你切语言,按钮、日历标题、分页器这些内置文字跟着变,不用一个个组件去改。
多主题定制也是一样,通过 u-config-provider 一层层往下传,你想改成公司品牌色,改一个配置就行,不用翻几十个组件的源码。
暗黑模式也是一键切换的。白天晚上来回切,组件库自动跟着变,连主题状态都存好了,下次进来还是暗色。这三个能力单独拿出来,可能都不难,但要在一个 80+ 组件的库里做到统一,才是真费劲的地方。


为了能让开发者更好更方便的定制主题,还开发了主题定制工具,3 分钟可生成 5 套主题,自带暗黑模式:
工具:主题生成工具(官方)
解决了一个老痛点的虚拟根组件
用过 uni-app 的人多半遇到过一个坑:想给全局搞点注入,经常得自己接第三方插件,还不一定兼容。
这就用到了全局根组件。uView Pro 内置了一个 vite-plugin-uni-root,把全局根组件自动注入了,你想挂全局状态、生命周期钩子,直接写就行,不用再折腾额外插件。
说白了,我把"根组件 "这件事从"要自己搭 ",变成了"组件库开箱就有"。这个能力 0.6.11 版本开始内置,后续又针对 HBuilderX 环境、微信小程序端的做了优化,终于小步快跑地把它打磨稳定了,欢迎来用,只需两步。
第一步:配置 vite.config.ts
js
import { defineConfig } from 'vite';
import Uni from '@dcloudio/vite-plugin-uni';
import { UniRoot } from 'uview-pro/plugins';
export default defineConfig({
plugins: [
UniRoot(), // 放在其他插件之前
Uni(),
],
});
第二步:创建 App.root.vue
js
<script setup lang="ts">
import { onLoad } from '@dcloudio/uni-app';
import { onMounted } from 'vue';
onLoad(() => {
console.log('App.root onLoad');
});
onMounted(() => {
console.log('App.root mounted');
});
</script>
<template>
<u-config-provider>
<slot />
<u-toast global></u-toast>
<u-modal global></u-modal>
</u-config-provider>
</template>
不需要修改任何页面代码,所有页面会自动被 <u-config-provider> 包裹,App.root.vue 中的内容全局生效。
详见:虚拟根组件
面向 AI 开发
AI 发展迅速,势头真是势不可挡,每天都有新变化。很多人还在争论 AI 会不会取代程序员,我的态度是:既然挡不住,不如全面拥抱。uView Pro 给开发者社区配了LLMS.txt、 Skills 和 MCP(Model Context Protocol)支持。
uView Pro 为大型语言模型(LLMs)提供了完善的上下文支持,帮助 AI 更好地理解和使用组件库。
Skills 是给 AI 用的一套工作流,让 AI 能直接按 uView Pro 的规范去写组件、查文档,不用瞎猜。
MCP 把组件库的能力以标准协议暴露出去,接上主流的 AI 编程工具就能用。
这几样东西,让 AI 帮忙写 uni-app 代码时,能少走很多弯路,至少它知道 uView Pro 的组件该怎么写了。
那些踩过的坑
从开源的这一年,最深的体会是"兼容性"三个字的份量。uView Pro 要跑小程序、H5、iOS App、Android App,可能每个平台都有不同表现。
尤其是小程序平台,种类太多,微信、支付宝、抖音、头条,每个平台的编译实现都不一样,最容易在这上面翻车。
举个真实的例子:provide/inject 在抖音/头条小程序里传不了值。
provide/inject 是我在组件库里用得比较多的一个 Vue3 特性,用来做跨层级传值。比如 u-form-> u-form-item -> u-input ,多层嵌套组件通信,用 provide/inject 最省事。不只是它,很多组件的父子传值也依赖这个机制。
结果在抖音小程序上一跑,懵了:配置往下传,子组件里 inject 拿到的永远是空。我一开始还怀疑是自己代码写错了,切到 H5 上重跑一遍,好好的;微信小程序上也好好的。唯独抖音和头条这两个字节系的小程序出问题。
排查到最后确认,是这两个平台的编译实现没有完整支持 provide/inject 的跨层级传递。这就麻烦了,因为 provide/inject 对组件库来说像"地基"一样,不是修一两个组件就能糊弄过去的。只要组件库用了 provide 和 inject,面向抖音/头条就得额外处理,所有依赖它的父子组件传值逻辑都要重做一遍,相当于在这两个平台上把传值方式整个换一套。我记得当时单独就这个功能重构,我就花了一周多的时间。
我把一些常见问题沉淀下来形成记忆文档:
接下来往哪走
uView Pro 不会原地踏步,下一步的重心是在稳定 uni-app 组件库的同时,逐步再有 uni-app x 的版本,用 UTS 强类型把组件库再编译到 Kotlin、Swift,让它在新的原生渲染体系下也能跑。
uni-app x 的蒸汽模式版本正在开发,预计不久就会与大家见面,总体方向是明确的:uView Pro 组件库会跟着 uni-app 官方脚步一起往前走。
开源这东西,坚持认真做一年,总有人看得见。