和传统工程化对比
下图列出传统前端工程化关注的内容(from umi)。


小程序的工程化空间受运行时和框架能力限制,下面按能力逐项比较:
- 框架:可选方案包括 kbone、taro、remax/r2m、mpvue、mpx 等。以优选业务覆盖的移动设备为准,这些方案存在体验问题或已停止维护,因此仍基于原生框架开发。小程序不提供直接操作视图的底层 API、组件层级管理和模板递归,并限制包大小与路由模型;这些限制也影响了框架方案的可行性。
- TypeScript:缺少适用于小程序的统一规范,原生 TypeScript 支持难以覆盖复杂场景。
- 样式(CSS):由于缺少视图层接口,样式方案选择有限。微信提供
@import等模块化能力;受包大小限制,可使用 PostCSS 加变量插件或 CSS 变量管理样式。 - JavaScript 编译、模块打包和压缩:这是可投入建设的部分。webpack 不适用于小程序,可采用基于 Babel 的 mpbuild,或基于 esbuild/SWC 的 mpe。
- 路由管理和请求库:实现受小程序框架提供的方案限制,可定制空间较小。
- 资源加载方式:资源固定为小程序主包和子包。新版基础库提供动态加载能力,但存在两个限制:
- 基础库版本不满足要求的小程序无法使用。
- 仍需在构建时集成资源,不能像传统微前端架构那样从远端加载代码。
- 数据流:可以建设,但小程序没有 Context 能力,方案的使用方式难以与传统前端框架对齐。
- 代码风格:使用 ESLint、Prettier 等工具约束。
- 文档能力和通用组件开发能力:需要投入建设。
- 测试:需要结合投入产出决定覆盖范围,业务团队通常不会优先投入。 对比可见,小程序中可直接复用传统工程化思路的部分有限,工程投入应更多放在业务集成和业务领域能力上。
小程序框架对比传统前端框架缺少什么
| 小程序 | 前端 | 问题 | 能否对齐 | 是否必要 |
|---|---|---|---|---|
| 启动流程 | 固定的 app → page 生命周期同步调用 | 任意编排 | 启动阶段存在异步依赖时,处理顺序较复杂 | 不能 |
| code split | 包维度 | 任意切分 | 不能 | |
| 加载能力 | 支持 分包异步化 ,且必须提前构建到一起,支持2.17.3及以上 | 支持从网络加载包 | 微应用拆分无法绕过集成构建 | 不能 |
| 编排能力 | page+component | 任意编排 | 不能 | |
| 组件能力 | 缺失 slot能力 | ~ | 不能 | |
| 组件间通讯 | props+父节点中转 | props和context能力 | 能 | |
| 视图介入 | 不能直接操作视图 | 可以直接操作 DOM | 缺少底层视图接口,动态操作难以保证性能 | 性能限制,不能 |
| 动态执行JS | 不支持 | eval等 | 能 | |
| 路由 | 固化 page → page + tabbar | 任意自定义 | 无法做到贴合业务场景做编排 | 不能 |
演进视角看小程序当下成熟度对比
2021 增补
| 第一阶段:14年~17年 | 第二阶段:18年~21年 | 第三阶段:21年后 | 核心 | 小程序能力 | |
|---|---|---|---|---|---|
| 框架 | 范式转移,vdom 提出 代表:react vue2 | 范式转移,编译时代替运行时 vdom 代表:svelte solidjs | 范式转移,去除 JS 运行时开销 代表:qwik | 更好的性能 | 还处于第一阶段 |
| 框架理念 | class+声明式框架+TS 支持 代表:react<0.14,vue2 | function 代表:react>15 | hooks 代表:react 16,vue3 | 框架表达内聚性的方式会影响可维护性 | 不到第一阶段,可做工 |
| 样式理念 | 样式预处理 代表:less scss | 样式后处理 代表:postcss | 样式框架 代表:tailwindcss | 样式组织方式会影响可维护性 | 不到第一阶段,可做工 |
| 状态管理 | 单向数据流+单store,中心化 代表:flux,redux,vuex,mobx | 增强ts+多store,去中心化 代表:mobx,pinia,recoil | 元数据,惰性更新等尝试 代表:zustand、jotai、valtio | 更好的DX,更好的性能,配合框架理念 | 不到第一阶段,可做工 |
| 工具链 | 范式转移,依赖分析,打包部署 代表:webpack | 微创新 代表:rollup | 构建效率提升 代表:vite | 效率的提升 | 不到第一阶段,可做工 |
| 架构 | SPA,SSR 代表:umi | 微前端,SSR 流式,SSG,ESR 代表:qiankun | 服务端组件等 代表:react18 | 大规模协同问题 算力转移提高性能 | 不到第一阶段 |
