组件库的现状

前端目前比较主流的框架有react,vuejs,angular等。

我们通常去搭建组件库的时候都是基于某一种框架去搭建,
比如ant-design是基于react搭建的UI组件库,而elementUI则是基于vuejs搭建的组件库。

虽然目前社区有相关工具,提供框架之间的转化服务,比如讲vuejs组件转化为react组件。
但是毕竟是不同的框架,有不同的标准。因此框架api发生变动,那么你就需要重写转化逻辑,
显然是不灵活的,因此我们暂不讨论这种情况。

作为公司而言,就需要为不同的框架写不同的组件库,尽管逻辑都是一样的。

另外如果框架升级,比如从1.x升级到2.x,那么对应组件库就需要升级,如果公司的组件库有很多(vuejs,react,angular等),
那么这种升级的概率就会更大。

什么是web-component?

那么有没有更好的方案,一次编写,到处使用呢?

答案就是借助web component。

Web Components 是一系列加入w3c的HTML和DOM的特性,使得开发者可以创建可复用的组件。

由于web components是由w3c组织去推动的,因此它很有可能在不久的将来成为浏览器的一个标配。

Web Components 主要由以下四个部分组成:

  • Custom Elements – 定义新html元素的api
  • Shadow DOM – Encapsulated DOM and styling, with composition
  • HTML Imports – Declarative methods of importing HTML documents into other documents
  • HTML Templates – The <template> element, which allows documents to contain inert chunks of DOM

web-component有什么优点

使用web components搭建组件库能够带来什么好处呢?
前面说了,web components 是w3c推动的一系列的规范,它是一个标准。

如果我们使用web components的api 开发一个组件,这个组件是脱离框架存在的,也就是说
你可以在任何框架中使用它,当然也可以直接在原生js中使用。

我们无须为不同的框架编写不同的组件库。

使用web components编写的组件库的基本使用方法大概是这样的:


&lt;script src="/build/duiba.js"&gt;&lt;/script&gt; &lt;!-- 运营位组件 --&gt;
&lt;operation-list&gt;&lt;/operation-list&gt;

毫不夸张地说, web components 就是未来。

但是web components的api还是相对复杂的,因此用原生的api开发web components还是
相对比较复杂的,就好像你直接用原生canvas api去开发游戏一样。

下面我们介绍下用于简化web components开发的库。

polymer

polymer是我接触的第一个web componment开发库,那已经是很多年前的往事了。

Build modern apps using web components

更多介绍polymer

stencil

stencil是在polymer之后出现的一个库。
第一次接触时在Polymer Summit 2017的分享上,这里贴下地址Using Web Components in Ionic - Polymer Summit 2017

Stencil is a tool developers use to create Web Components with some powerful features baked in, but it gets out of the way at runtime.

那么powerful features具体指的是什么?


Virtual DOM
Async rendering (inspired by React Fiber)
Reactive data-binding
TypeScript
JSX

它也是一个用于生成web compoennt的tool。 不同的是她提供了更多的特性(Reactive data-binding,TypeScript,JSX, virtual dom)以及更强的性能(virtual dom, Async rendering).

细心的人可能已经发现了,我将Virtual DOM既归为特性,又归为性能,没错! Virtual DOM提供了一种到真实dom的映射,使得开发者不必关心真实dom,从这个层面讲它是特性。

从虚拟dom之间的diff,并将diff info patch到real dom(调和)的过程来看,它是性能。

用stencil开发web components体验大概是这样的:


import { Component, Prop, State } from '@stencil/core'; @Component({
tag: 'my-component',
styleUrl: 'my-component.scss'
})
export class MyComponent {
// Indicate that name should be a property on our new component
@Prop() first: string; @Prop() last: string; @State() isVisible: boolean = true; render() {
return (
&lt;p&gt;
Hello, my name is {this.first} {this.last}
&lt;/p&gt;
);
}
}

Demo

这是我基于stenciljs + storybook写的一个小例子。大家可以clone,并运行查看效果。

duiba-components

通过这样搭建的企业级组件库,就可以轻松地为不同业务线提供基础组件库,而不必担心使用者(各个业务方)的技术栈。

将来业务方的框架升级(比如vue1升级到vue2),我们的组件库照样可以使用。

可以想象,如果es标准发展地够好,web components 等规范也足够普及,无框架时代将会到来。

无框架,不代表不使用库。

只需要借助工具库就可以开发足够通用的组件,也不需要babel这样的转换器,更不需要各种polyfill。
那么开发者大概会非常幸福吧,可惜这样的日子不可能存在,但是离这个目标足够近也是极好的。

来源:https://segmentfault.com/a/1190000015766801

使用web-component搭建企业级组件库的更多相关文章

  1. 从0搭建vue3组件库:自动化发布、管理版本号、生成 changelog、tag

    今天看到一篇文章中提到了一个好用的工具release-it.刚好可以用在我正在开发的vue3组件库.纸上得来终觉浅,绝知此事要躬行,说干就干,下面就介绍如何将release-it应用到实际项目中,让组 ...

  2. 从0搭建vue3组件库:Shake抖动组件

    先看下效果 其实就是个抖动效果组件,实现起来也非常简单.之所以做这样一个组件是为了后面写Form表单的时候会用到它做一个规则校验,比如下面一个简单的登录页面,当点击登录会提示用户哪个信息没输入,当然这 ...

  3. 从零开始搭建Vue组件库——VV-UI

    前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...

  4. 从零开始搭建Vue组件库 VV-UI

    前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...

  5. 从0搭建vue3组件库: 如何完整搭建一个前端脚手架?

    相信大家在前端开发中都使用过很多前端脚手架,如vue-cli,create-vite,create-vue等:本篇文章将会为大家详细介绍这些前端脚手架是如何实现的,并且从零实现一个create-kit ...

  6. 从0搭建Vue3组件库:button组件

    button组件几乎是每个组件库都有的:其实实现一个button组件是很简单的.本篇文章将带你一步一步的实现一个button组件.如果你想了解完整的组件库搭建,你可以先看使用Vite和TypeScri ...

  7. 从0搭建vue3组件库: Input组件

    本篇文章将为我们的组件库添加一个新成员:Input组件.其中Input组件要实现的功能有: 基础用法 禁用状态 尺寸大小 输入长度 可清空 密码框 带Icon的输入框 文本域 自适应文本高度的文本域 ...

  8. vuepress搭建UI组件库文档踩坑篇

    为了实现组件效果预览及代码展示可折叠功能,使用了插件vuepress-plugin-demo-container 相关配置可参考官网说明文档 第一步 安装插件 npm i - D vuepress-p ...

  9. Vitepress搭建组件库文档(下)—— 组件 Demo

    上文 <Vitepress搭建组件库文档(上)-- 基本配置>已经讨论了 vitepress 搭建组件库文档的基本配置,包括站点 Logo.名称.首页 home 布局.顶部导航.左侧导航等 ...

随机推荐

  1. Anaconda如何配置多版本Python

    https://blog.csdn.net/guanmaoning/article/details/80031279

  2. 二分判定 覆盖问题 BZOJ 1052

    //二分判定 覆盖问题 BZOJ 1052 // 首先确定一个最小矩阵包围所有点,则最优正方形的一个角一定与矩形一个角重合. // 然后枚举每个角,再解决子问题 #include <bits/s ...

  3. SQLServer 2008 的数据库日志清理

    -- SQLServer 2008 的数据库日志清理 ,与 Sql2000 或 2005 的方法不一样,需要采用 下面的sql来清理 USE [master] GO ALTER DATABASE [数 ...

  4. [转]Visual Studio 2010单元测试(2)--运行测试并查看代码覆盖率

    Visual Studio 2010 单元测试--运行测试并查看代码覆盖率 运行测试并查看代码覆盖率对程序集中的代码运行测试时,可以通过收集代码覆盖率数据来查看正在测试的项目代码部分. 运行测试并查看 ...

  5. windows下bat批量处理启动exe

    新建文本文档,start.dat start "" "D:\QQ\anzhaung\Bin\QQ.exe" 启动QQ cd ./当前文件夹下,../上一文件夹下 ...

  6. leyou_07_对数据的操作

    1.目标在数据库的两张表中拿到以下数据,并完成状态.搜索和分页功能 实体类Spu(页面需要的数据) 实体类Category(页面需要的数据) name:商品分类 2.分析: 返回的数据在两个实体类中, ...

  7. svn里update以后还是有红色的感叹号怎么办

    不用那么麻烦,直接还原就行了,客户端是TortoiseSVN的话,在该文件或文件夹上点右键,选择TortoiseSVN——revert有时还原之后系统反应没那么快,还是显示红色感叹号,刷新几下就正常了 ...

  8. 深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则[转]

    在这个小结里面重点讨论原子操作的原理和设计思想. 由于在下一个章节中会谈到锁机制,因此此小节中会适当引入锁的概念. 在Java Concurrency in Practice中是这样定义线程安全的: ...

  9. 【DM8168学习笔记5】EZSDK目录结构

    EZSDK5.02的目录结构与之前的版本不同,之前的版本各个组件都放在/ezsdk目录下,5.02做了整合. 之前版本:(图片摘自:3.DM816x_1-day_Workshop-Getting_St ...

  10. 进一步封装poco下的mysql操作

    为方便程序对mysql操作,我对poco的mysql进行了再次封装,主要是针对自己应用需要的部分. 开发工具:netbean 系统环境:centos7 poco版本: poco-1.9.0-all 主 ...