1. uView-Pro-Starter 是什么?
有些人可能不了解 uView-Pro-Starter 快速启动项目,它是一个基于 Vue 3 + uni-app + TypeScript 的跨端快速起步模板,内置了 uView Pro 组件库,开箱即用,支持 App、H5、各种小程序。
uView-Pro-Starter 是一个MIT协议的开源项目,可以免费使用:

具体功能如下:

模板自带的东西挺全的:
- 5 个 Demo 演示页(组件展示、创建演示、HTTP 请求示例、Pinia 示例、uView Pro 介绍)
- 6 个 about 二级页(个人介绍、贡献者、FAQ、指南、开源协议、设置)
- 多语言(中英文,完整词条)
- 多主题(亮色、暗色、紫色、绿色、橙色)
- 自定义 TabBar(基于 Pinia 状态管理)
- Http 拦截器(请求/响应拦截)
- API 演示层(基于
uni.request封装) - Pinia 状态管理 + 持久化插件
这些功能放在一起,对想快速了解模板能力的人很友好,但在实际做项目的时候,你可能只需要其中三成。多出来的部分占体积、干扰注意力、还可能引入不必要的依赖。
2. 拿到 Starter 模板,想删但删不动?
很多人拿到 uView-Pro-Starter 的第一反应是:东西不少,但用不上。Demo 演示页、about 二级页、多语言、多主题、自定义 TabBar、Http 拦截器、Pinia、API 演示层......这些对了解模板能力有帮助,对正式做项目就是负担。
你想清掉一部分,开始手动删,很可能会出现以下问题:
- 删了 demo 页,首页入口点进去白屏------忘了删
home.vue里的入口数组。 - 补上之后,构建又报
Cannot find module '@/stores/tabbar'------删了 Pinia 但自定义 TabBar 还在引用。 - 把 TabBar 也删了,
pages.json里的原生tabBar配置还指向不存在的页面。
来来回回折腾快一个小时,type-check 才通过。
有时候这不是你粗心,是 Starter 模板本身分了层,模块之间有依赖,删一个模块,得连带删掉所有引用它的地方,漏一个就编译失败,每次起新项目都要手动来一遍,或许太费劲了。
3. 我为什么放进去,又为什么有人要删?
当初做这个 Starter 的时候,我把这些东西全塞进去,是有考量的。
一个起步模板要解决两个问题:
- 一是"能不能跑"
- 二是"能干什么"
很多模板只给了空架子,你打开看什么都没有,还得翻文档查组件怎么用,所以我最初的想法是把 5 个 Demo 演示页放进去------组件展示、创建演示、HTTP 请求示例、多主题、多语言、Pinia 示例、uView Pro 介绍等等。
你拉下来跑一下,十分钟就知道这个模板有哪些能力、每个组件长什么样。about 下的 6 个二级页也是同理:个人介绍、贡献者、FAQ、指南、开源协议、设置,让你了解项目背景和组件库全貌。
但问题可能也出在这,模板是给所有人看的,项目是给你自己用的。模板需要展示"我能做什么",项目需要的是"我只要什么"。你做项目的时候,Demo 页不会上生产,多语言可能只做中文,多主题可能只用一套,Pinia 可能用不到,自定义 TabBar 可能不需要。这些当初帮你了解模板能力的东西,到了正式项目里就成了多余。
4. 为什么需要 project-cleaner
所以我做了这个 Skill,就是因为每个用 Starter 的人都会面临"删不删、怎么删、删了会不会挂"的问题。
project-cleaner 解决的痛点很具体:
- 不知道删什么会牵连什么 ------删 Pinia 要连带删 TabBar,删多语言要先内联
t()再删目录,卸 z-paging 要同步删tsconfig.json的类型引用。这些关联靠手动排查太累。 - 删除顺序不对会中间态崩 ------先删了
stores/,app-tabbar就引不到了,你连验证都做不了。 - 清理后不知道是否干净------删完了哪些文件还残留引用?哪些路由指向了不存在的页面?type-check 能兜住一部分,但不够全面。
- 每次起新项目都要来一遍------手动清理没法复用,这次删完下次还得重新踩坑。
project-cleaner 技能把这些事情都自动化了。它不是帮你删文件,它能帮你安全地、按依赖关系、可验证地删文件。
5. 能清理什么:11 个清理点
Skill 提供 11 个清理点,分成四组。每个都能单独开关,你勾选要删的,其余保留。
演示内容

| 清理点 | 默认 | 删什么 |
|---|---|---|
| Demo 演示页 | 删 | pages/home/ 下 5 个 demo 页面 + home.vue 入口引用 + pages.json 路由 + locale 词条 |
| about 二级页 | 删 | pages/about/ 下 6 个子页(me/contributors/faq/guide/license/settings)+ about.vue 入口引用 + 路由 + 词条 |
工程能力


| 清理点 | 默认 | 删什么 |
|---|---|---|
| 多语言 | 删 | 先把 t('key') 内联为硬编码中文,再删 locale/、useLang、main.ts locale 配置 |
| 多主题 | 删 | 删 uview-pro.theme.ts + main.ts theme 配置;App.root.vue 的 config-provider 保留(承载全局 toast) |
| 自定义 TabBar | 留 | 删 stores/tabbar.ts + app-tabbar/ 组件 + app-page.vue 的 show-tabbar 分支 + pages.json 原生 tabBar 配置 |
| Http 拦截器 | 留 | 删 http.interceptor.ts + main.ts httpPlugin;组件内置的 http 仍可用 |
| Pinia 状态管理 | 留 | 删 stores/ + main.ts 挂载 + 卸 pinia 依赖;自动连带删 pinia-demo 页和自定义 TabBar |
依赖与文档

| 清理点 | 默认 | 删什么 |
|---|---|---|
| API 演示层 | 删 | 删 api/ 目录(当前无页面引用,安全) |
| 冗余依赖与死常量 | 删 | 卸 z-paging(未用)+ 同步删 tsconfig.json 的 z-paging/types 类型引用 + 删 constant.ts 的 GUIDE_*/ONBOARDING 死常量 |
| 文档同步 | 开 | 按已删模块更新 docs/ARCHITECTURE.md 模块清单 |
维护
| 清理点 | 默认 | 做什么 |
|---|---|---|
| 更新 uView Pro 组件库 | 更新 | 同步 constant.ts 版本号,给出 pnpm add uview-pro@latest 命令由你执行 |
默认值不是随便定的------演示内容和 API 层默认删,因为正式项目基本用不上;
TabBar、Http、Pinia 默认留,因为这三样你可能要接着用。
当然,全部可以按需调整,随意定制你想要留的,想要删除的。
6. 依赖感知:删什么自动连带删什么

这是 project-cleaner 的核心。每个清理模块都记录了"删了它之后还会牵动哪些文件",勾选时自动连带处理。

举几个典型的联动:
删 Pinia ------不是删掉 stores/ 目录就完了。pinia-demo.vue 页面引用了 useCounterStore,app-tabbar 依赖 useTabbarStore,main.ts 里有 app.use(store) 挂载,package.json 有 pinia 依赖。这些全部要一起处理。Skill 会自动连带删 pinia-demo 页和自定义 TabBar。
删多语言 ------不是直接删 locale/ 目录。项目里到处都是 t('home.title') 这种调用,直接删目录页面就全崩了。Skill 先跑一个内联脚本,把 t('key') 替换成硬编码中文,再删 locale 目录和相关 import。
删自定义 TabBar ------删了组件层的 TabBar,配置层的原生 tabBar 也要一起删。pages.json 里整个 tabBar 块(含 list)都要移除。theme.json 不动,它是 uni-app 原生主题,跟自定义主题是两回事。
卸 z-paging ------package.json 卸载了还不够,tsconfig.json 的 compilerOptions.types 里还挂着 z-paging/types,不删掉的话 vue-tsc 会报 Cannot find type definition file。
7. 怎么用:6 步流程
第 1 步:基线快照
先跑一遍残留扫描脚本,记下来清理前项目里有哪些符号、路由、词条是合法的。这一步的目的是建立对比基线------清理完再扫一遍,留没留残留一眼就知道。
第 2 步:多选清理项
Skill 按上面四组列出 11 个清理点,你勾选要删的。每个都有默认值,默认值参考了"正式项目通常保留什么"。勾选完后,对破坏性操作(删目录/依赖/文件)会二次确认,把待删文件清单列出来。
第 3 步:冲突校验
如果你勾的组合有问题,Skill 会提示。比如你勾了"删 Pinia"但没勾"删自定义 TabBar"------app-tabbar 强依赖 store,不一起删会编译失败。Skill 会提示你二选一或自动连带。
第 4 步:按安全顺序执行
不是随便删,而是按"先删页面内容、再收敛工程能力"的顺序来。10 个模块的执行顺序是:
- Demo 演示页 + about 二级页(先删内容)
- 去多语言(先内联再删)
- 去多主题
- 去自定义 TabBar
- 去 Http 拦截器
- 去 Pinia(连带删 TabBar 和 pinia-demo)
- 去 API 演示层
- 去冗余依赖与死常量
- 文档同步
- 更新组件库
这样保证删到中途项目也能编译通过,你随时可以验证。
第 5 步:复扫与构建验证
清理完了不算完,得验证。验证分四层:

- 残留扫描(秒级):扫描坏路由、悬空 import、残留符号、locale 缺键,退出码 0 才算过
- 类型检查 (十几秒):
pnpm run type-check,无类型错误 - 构建验证 (几分钟):
pnpm run build:h5,构建成功 - 运行时抽查 (可选):
pnpm dev:h5,打开首页和关于页看看
第 6 步:汇报
Skill 最后列出"已删除/已修改"清单,你可以逐项对账,确认没有误删。
8. 清理前后长什么样
看一下清理前后的项目结构对比:


清理前,src/ 下有 pages/home/ 5 个 demo、pages/about/ 6 个子页、stores/ 3 个 store、api/、locale/、composables/、common/ 下还有 http.interceptor.ts 和 uview-pro.theme.ts。
清理后(勾选全部删除项),src/ 只剩:
pages/home/home.vue+pages/about/about.vue(两个核心页面)common/constant.ts+common/style.scss(常量和全局样式)components/app-page/(页面布局组件)main.ts+App.vue+App.root.vue(入口)pages.json+theme.json+manifest.json+uni.scss(配置)
package.json 里 pinia、pinia-plugin-persistedstate、z-paging 全部卸载。tsconfig.json 的 types 只保留 uview-pro/types。type-check 和 build:h5 全绿。
9. 总结
总而言之,project-cleaner 做的事情不复杂:把"删 Starter 模板里用不上的东西"这件事从手动一小时变成勾选确认十分钟。最关键的是删完还能编译------依赖感知、安全顺序、验证闭环,这三样保证你不会删出一个跑不起来的项目。
如果你正在用或打算用 uView-Pro-Starter 这个 uni-app 起步模板,每次新项目都要清理一遍演示代码,可以试试这个 Skill,只需勾选你要删的,剩下的交给自动化。