迁移到 V3
Brick Next V3 已进入收尾阶段,新的架构主要有以下几个目标:
- 构件即标准的 Web Components
- 与框架解耦:灵活性
- Web Components 最佳实践:可靠性、标准化
- 构件引用构件:可复用性、可扩展性
- 存量构件:可移植性
- 轻框架
- 专注 Storyboard 解析,而不是提供公共 UI 库和工具库
- 出色的访问性能
- 在架构上提供跨构件包的模块复用机制
- 减小网络传输体积,同时尽可能并发网络请求,包括静态资源和业务数据
为了达成目标,v3 在编排层面做了很多减法,移除了一些废弃的特性,以及一些会导致无法进行性能调优的特性。同时,为了现有微应用能更平滑地迁移到 v3 架构,因此在默认的兼容模式下,有一些特性仍然允许使用,详见下表“兼容”一列标注了 ✔️ 的各项。但注意这些特性在严格模式下无法使用。
| 移除的特性 | 替代方法 | 兼容 |
|---|---|---|
| 老模板( NT 包) | 使用自定义模板配合 :forEach 等新提供的控制类节点实现 | |
Route.providers, Route.defineResolves | useProvider | |
Resolve.provider, Callback.*.provider | useProvider | |
Resolve.field | 使用 Resolve.transform | ✔️ |
Route.hybrid, App.layout:console, App.legacy:iframe | 不再兼容使用 iframe 嵌套老 Console | |
Route.type != "redirect" 时的 Route.redirect | 使用 Route.type:redirect 定义重定向 | |
跨层级定义名称重复的有效(即:没有被 if 条件忽略的) Context | - | |
Brick.context | 统一在路由上定义 Context 或在模板中定义 State | ✔️ |
Brick.exports | - | |
Brick.bg | 不再支持预定义的 providers;如果希望构件不影响 UI 布局,可自行设置 display:none(对于无 UI 的工具类构件应在构件层面实现) | |
Brick.lifeCycle.useResolves | 使用 Context 或 State 定义数据 | |
模板的 extraOneWayRefs/mergeProperty/refTransform | 使用模板的 State 数据 | |
模板的 asVariable, <% TPL.* %> | 使用模板的 State 数据 | ✔️ |
动态访问 CTX/STATE: CTX[abc] / STATE[a ? "b" : "c"] | 使用静态访问:a ? STATE.b : STATE.c | |
使用 context.replace 或 context.load 等接口调用未定义的 CTX/STATE | 先定义对应的数据 | |
在占位符中访问 CTX: ${CTX.q} | 使用表达式 <% CTX.q %> | |
useBrick.transform | 直接使用 useBrick.properties,也可以引用 DATA | ✔️ |
useBrick.properties 整个设置为表达式 | 将属性平铺出来,便于后续做属性可视化编排及静态分析等 | |
Menu.type:brick | 使用其他方式定义菜单数据 | |
| 模板 State 默认暴露为该模板对外的属性 | 需要主动声明 expose: true | ✔️ |
note
模板的 asVariable 和 <% TPL.* %> 在 v3 兼容模式下,会被转换成 State,因此,注意不能与现有 State 名称重复。
note
模板的 mergeProperty 的使用有待进一步讨论,场景:在 table 中对外暴露部分列配置。