2.3 2.11~2.12:外部模块无缝扩展、laytpl 重构与 i18n 国际化
如果说 2.10 解决的是 layui 内部的范式统一,那 2.11(2025-04-21)与 2.12(2025-09-29)解决的就是 layui 与外部世界的关系:怎么引入第三方模块,怎么写模板,怎么做多语言。这一篇逐个拆。
layui.extend 无缝扩展:第三方模块终于不用套壳了
老版本用 layui.extend 引入第三方库,体验可以用一个词概括:套壳。任何想接入的外部模块,都得先包装成符合 layui 模块规范的样子,配好路径、约定好导出形式,才能被 layui 的模块体系认领。写过的都知道,这层包装不难,但烦,而且团队里每个人包装出来的姿势还可能不一样,规范名存实亡。
2.11.0 把这件事彻底翻新:layui.extend 支持无缝扩展任意外部模块,第三方模块不再需要遵循 layui 模块规范。这句话的工程价值怎么强调都不过分:
- 接入成本骤降:任意第三方库拿来就能扩展进体系,无需改造源码。
- 生态壁垒消失:社区里现成的库直接可用,不用苦等有人做出 layui 适配版。
- 团队规范统一:扩展方式只剩一种标准姿势,代码评审少了一类扯皮。
- 遗留资产增值:老项目里沉淀的通用工具脚本,如今可以原样接入新体系。
从套壳到无缝,本质上是从闭门造车到开门迎客。一个框架对外部生态的态度,往往比它自身的功能更影响生命力,这一条我认为是 2.11 里含金量最高的更新。
laytpl 重构:老模板引擎的一次彻底翻新
2.11.0 的第二个大动作是重构 laytpl 模板引擎。老 laytpl 能用,但语法风格老旧、报错信息晦涩,写复杂模板时常有一种在暗巷里摸墙的感觉。这次重构是全方位的。
先看新增选项:cache 选项带来缓存能力,condense 选项负责压缩输出,两者都指向性能与输出体积的优化。
再看全新的标签风格,这是与老写法差异最大、也最值得记牢的部分:
| 场景 | 新风格写法 | 说明 |
|---|---|---|
| 语句 | {{ 语句 }} |
逻辑控制与赋值的主体 |
| 转义输出 | {{= 变量 }} |
输出前转义,安全的默认姿势 |
| 原文输出 | {{- 变量 }} |
不转义原样输出,用于可信内容 |
| 注释 | {{# 注释内容 }} |
模板内注释,不进入最终渲染 |
功能层面还有两件实事:include() 支持导入子模板,页面片段终于可以拆开组织、按需复用;extendVars() 支持扩展模板变量,公共数据不用在每个模板里重复传。再配上报错上下文捕获与性能提升——模板写错时能定位到具体上下文,大模板渲染也更快。
兼容性方面不必过度紧张:存量模板的老写法有兼容安排,但我仍建议升级后先跑一遍全量模板渲染的回归测试,确认输出一致,再逐步把新模板切换到新风格。哪些老语法在哪个版本点被收紧,以官方更新日志为准。
2.12 的小步快跑:i18n 与各组件细节
2.12.0 是一张典型的快节奏更新清单,首当其冲的是新增 i18n 国际化模块。
中后台产品出海,多语言是绕不开的坎。老版本没有官方 i18n 方案,团队各自为政:有的手写映射表,有的引第三方库再自己缝合,文案散落在代码各处,改一处漏三处。i18n 模块的补齐,意味着官方把这个痛点接了过去,多语言支持的姿势从此有了标准答案。
其余更新同样实在:
| 更新点 | 所属模块 | 带来的变化 |
|---|---|---|
| ajax 选项 | table | 自定义请求方式,对接异构接口更自由 |
| syncFixedRowHeight | table | 行高同步,固定列与主表不再错位 |
| highlightLine | code | 行级高亮,代码展示更贴近编辑器体验 |
| component 重构 | slider | 滑块组件并入统一组件范式 |
| 多面板支持 | dropdown | 支持同时打开多个下拉面板 |
dropdown 支持同时打开多个面板这条,看似小改动,实则解决了不少交互场景的老大难:多个筛选条件并行展开、对照式操作面板等需求,以前得靠布局技巧硬凑,现在组件原生支持。
另外别忘了 2.11 里还有一条容易漏看的:rate 评分组件用 component 重构。它与 2.12 的 slider 一样,都是组件范式统一化进程上的落子,积少成多。
小结
2.11~2.12 两个版本,一个打开了对外的门(无缝扩展第三方模块),一个修好了内部的路(laytpl 重构、组件范式持续推进),还补上了国际化这块官方拼图。单看每一项都不算惊天动地,合起来看,是框架从恢复走向成熟的完整一跃。
