前端 UI 组件复用工具

2017-06-25 14:59:54 +08:00
 tower1229

“懒”是第一生产力。

代码复用总是程序员喜闻乐见的,前端组件化的最终目的就是复用,今天我们就将深入探讨如何实现 UI 组件的复用。

通常我们所说的组件往往是包含业务逻辑的前端组件,而这类组件实际上很难实现广义上的复用,顶多能在同一条业务线上复用一下,但 UI 组件就不一样了,没有了业务的约束,只在 UI 层面上实现复用,那想象空间就很大了,所以这里我们只讨论 UI 组件。

首先界定一下,UI 组件就是一个 web 界面的前端代码片段,虽然说不包含业务,但基本的 JS 效果是可以有的,比如表单验证、轮播图效果、选项卡效果等等,也就是说 UI 组件可以包括 html\css\js。我们复用的目的并不是简单的复制粘贴,而是希望可以实现一定程度上的自定义,比如界面内容可以调整、显示样式可以调整,甚至 JS 效果也可以加以设置,这样才算真正有实用价值的组件复用。

那么我们就来构思一下如何达到以上目的。首先最核心的就是组件自定义功能,自定义意味着一个组件的 html\css\js 代码都可以被修改,并且编辑过程要所见即所得。这个功能我们可以借助模板引擎实现,思路是,将组件代码全部用模板语法来写,然后抽出来一份配置数据,模板引擎用这份数据解析模板,就得到了最终浏览器可以运行的代码。修改配置的过程也就是编辑配置数据的过程,编辑后实时调用模板引擎,重新解析得到新的代码,再将代码实时更新到浏览器中,就实现了编辑过程所见即所得。

拆解一下,这个功能大致需要实现以下几个部分:组件代码的获取、配置数据的可视化、模板引擎的调用、配置文件编辑、组件演示、组件 html/css/js 代码复制。

再延伸一下,组件代码的自动获取想必要依赖一定的组织规律,那么就要先约定好组件的管理方式。比如约定组件由一个文件夹组成,内部包含temp.html/style.css/script.js三个模板文件,再加上一个config.json配置数据文件。组件应该有一个总的存放文件夹作为组件库,为了能获取到组件的信息,组件库还需要一个目录文件,提供所有组件的列表以及每一个组件的信息,这样就可以通过这个目录获取到组件的模板、配置以及任何我们需要的信息了。

基于以上分析已经可以着手开发一个 UI 组件管理工具了,能够实现组件管理、预览、编辑、代码复制功能。

如果止步于此,那这个工具的实用价值不是很大。围绕前端代码复用,还可以进一步扩展功能,比如是否可以从设计环节就开始参与到前端组件管理呢?由设计师发布并维护公司内部 UI 组件库,在项目设计阶段,就可以从组件库中挑选基础组件加以调整,并将结果交付给前端,前端只需要将设计师的组件还原,就可以得到能直接用于项目的前端代码了。

回顾一下,这里面需要组件库实现的功能是,将组件的编辑结果生成一个特殊代码,这个代码用来在管理工具内还原组件的编辑现场,从而实现设计过程到前端开发的交接。这个功能的实现原理是将组件原始配置与所修改配置做合并,得到组件的修改后配置,再用于组件的渲染和展示,就可以还原设计现场了。

到这里我们需要的功能就基本完整了,目前这个工具已经开发完成,并在以上功能的基础上,又增加了用户管理和使用统计,有助于更好的优化组件库建设。

源码:Github

预览:http://refined-x.com/WidgetsPlayground/

如果项目对你有帮助,请去 Github 尽情的 star 不要客气。

2972 次点击
所在节点    奇思妙想
5 条回复
paloalto
2017-06-25 16:19:57 +08:00
访问 http://refined-x.com/WidgetsPlayground/ 会跳转到 http://refined-x.com/WidgetsPlayground/#/login 登录界面,
删掉后面的 login,然后回车,就进去了。

paloalto
2017-06-25 16:23:04 +08:00
tower1229
2017-06-25 17:37:54 +08:00
@paloalto 修复了
openefit
2017-07-11 05:50:03 +08:00
React 不就可以么,问什么要搞那么复杂
tower1229
2017-07-11 08:50:57 +08:00
@openefit react 组件如果要做到可视化管理、编辑、应用也同样需要这样一套东西,只不过这里说的前端组件是最原始的前端代码片段而已。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX