组件库的现状

前端目前比较主流的框架有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. linux-c getopt()参数处理函数

    转自:https://www.cnblogs.com/qingergege/p/5914218.html 最近在弄Linux C编程,本科的时候没好好学啊,希望学弟学妹们引以为鉴. 好了,虽然啰嗦了点 ...

  2. [转]WPF焦点概述

    WPF 中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点. 键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素. 本概述将详细介绍这些概念. 理解这些概念之间的区别对于创建具有可以获 ...

  3. /proc/cpuinfo和/proc/meminfo来查看cpu信息与内存信息

    #一般情况下使用root或者oracle用户查都可以. # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 --查 ...

  4. Django项目:CRM(客户关系管理系统)--76--66PerfectCRM实现CRM课程作业排名

    # classtop_urls.py # ————————64PerfectCRM实现CRM课程排名详情———————— from django.conf.urls import url from b ...

  5. vim中利用swp文件进行恢复

    经常电脑因为没电或者强行关闭vim,会导致原文件没有保存, 这种情况下vim会自动保存一个.swp文件,需要恢复时, 使用vim -r filename 期中-r意思为recovery 恢复之后最好删 ...

  6. mysql中的字符集和校对规则(mysql校对集)

    1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...

  7. 视频透雾原理加视频增强Retinex算法介绍

    (本文转自:http://www.syphong.cn/52-1.html#) 视频透雾原理加视频增强Retinex算法介绍 -上海凯视力成 钟建军 一. 视频增强的背景 视觉信息是人类获得外界信息的 ...

  8. svn命令获取项目中被忽略文件情况

    第一步.通过终端进入项目目录下第二步.运行命令svn pg svn:ignore -R

  9. js 事件的自定义函数

    转自:http://www.zhangxinxu.com/study/201203/js-custom-dom-events.html http://stylechen.com/trigger.htm ...

  10. kafka例子程序

    //生产端 产生数据 /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor li ...