引言

最近要做一个跨平台使用的卡片插件,考虑到插件的通用性,就选择了Web Components技术来实现

Web Components 概念

Web Components 是一套不同的技术,允许你创建可重用的定制元素(它们的功能封装在你的代码之外)并且在你的 web 应用中使用它们。

它由三项主要技术组成:

1、Custom element(自定义元素):一组 JavaScript API,允许您定义 custom elements 及其行为,然后可以在您的用户界面中按照需要使用它们。

2、Shadow DOM(影子 DOM):一组 JavaScript API,用于将封装的“影子”DOM 树附加到元素(与主文档 DOM 分开呈现)并控制其关联的功能。通过这种方式,您可以保持元素的功能私有,这样它们就可以被脚本化和样式化,而不用担心与文档的其他部分发生冲突。

3、HTML template(HTML 模板):<template><slot> 元素使您可以编写不在呈现页面中显示的标记模板。然后它们可以作为自定义元素结构的基础被多次重用。

兼容性

现阶段的 Safari 和 Chrome 已经都原生支持了 Web Components 的规范标准。Firefox,Edge 和 IE11 在 Polyfill 的支持下也都能很好的支持 Web Components。

host

技术选型

考虑到学习成本,这里只对比了一些主流框架

前端框架的满意度 & 关注度走势

前端框架的性能测试

越绿表示分越高

前端框架包体积的对比

host

无论是满意度、关注度还是性能,Svelte 都是很突出优秀的,下面看一下它的优势

Svelte 优势

1、不需要运行时代码的框架,因此减少了框架运行时的代码量;

2、减少代码量:构建的组件无需依赖模板文件;

3、无虚拟DOM:Svelte 将你的代码编译成体积小、不依赖框架的普通JS代码,在构建时运行,将组件转换为命令式代码,以手术方式更新 DOM;

4、真正的响应式:无需复杂的状态管理库,Svelte 为 js 自身添加反应能力,因为他是一个编译器,可以通过在幕后来检测赋值;

5、最主要的是 Svelte 是生来就支持 CustomElements ,并提供了编译 API。

所以我选择了svelte

而选择 vite 主要原因就是快

项目搭建

1、npm init vite@latest 下载模版命令

2、输入项目名称 vite_svelte_comps

3、选择svelte模版(这里还可以选择ts)

4、进入项目并安装 npm install

5、运行 npm dev

开发一个Counter Web Components

Counter.svelte

host

将自定义组件转成通用组件

需要将自定义 Svelte 组件转成通用的 Web Component ,这样才可以在其他框架中直接使用。

需要在 svelte.config.js 文件中 compilerOptions: { customElement: true }

host

然后在组件内定义元素名称<svelte:options tag="my-custom-counter"/>

host

在index.js 中导出

host

打包

打包 npm run build

host

注册并登录 npm 账号

1、首先要在 https://www.npmjs.com/ 官网上注册一个账号

2、注册成功后,在终端登录 npm 账号 npm login (登录 npm 账号,密码,邮箱验证)

Username: npm 用户名Password: npm 登录密码Email: npm 绑定的邮箱;回车后,会向你的邮箱发送一个验证码Enter one-time password: 你邮箱收到的6位数验证码

3、登录成功

host

发布到 npm 上

进入项目所在的终端,输入指令 npm publish

下面是发布成功后的样子

host

react 项目中的引用情况

npm i vite_svelte_comps

使用demo地址:https://codesandbox.io/s/awesome-saha-05stz8?file=/src/App.js

host

vue 项目中的引用情况

npm i vite_svelte_comps

使用demo地址:https://codesandbox.io/s/wonderful-galileo-pnmryi?file=/src/App.vue

host

参考资料

[1] 性能测试(https://rawgit.com/krausest/js-framework-benchmark/master/webdriver-ts-results/table.html)

[2] svelte中文网(https://www.sveltejs.cn/)

[3] All the Ways to Make a Web Component(https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/)

[4] WebComponents 框架对比(https://zhoukekestar.github.io/notes/2020/02/07/webcomponents.html)

[5] [Web Component(https://developer.mozilla.org/zh-CN/docs/Web/Web_Components)

- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

svelte + vite 开发 Web Components相关推荐

  1. 从 0 到 1 上手 Web Components 业务组件库开发

    组件化是前端发展的一个重要方向,它一方面提高开发效率,另一方面降低维护成本.主流的 Vue.js.React 及其延伸的 Ant Design.uniapp.Taro 等都是组件框架. ​ Web C ...

  2. 【总结】- 从 0 到 1 上手 Web Components 业务组件库开发

    组件化是前端发展的一个重要方向,它一方面提高开发效率,另一方面降低维护成本.主流的 Vue.js.React 及其延伸的 Ant Design.uniapp.Taro 等都是组件框架.Web Comp ...

  3. 【总结】1181- 从 0 到 1 上手 Web Components 业务组件库开发

    组件化是前端发展的一个重要方向,它一方面提高开发效率,另一方面降低维护成本.主流的 Vue.js.React 及其延伸的 Ant Design.uniapp.Taro 等都是组件框架.Web Comp ...

  4. 前端笔记:使用Web Components进行原生组件化开发

    文章目录 目的 基础说明 技术点介绍 Custom elements Shadow DOM HTML templates 整合成独立组件文件 示例演示与说明 示例一 示例二 es6-string-ht ...

  5. 【海康威视】前端开发:【4】Chrome谷歌浏览器 Web Components Kit 插件支持

    文章目录 一.前言 二.解决方案 1.Web Components Kit 插件安装: 2.安装Chrome指定版本浏览器: 3.设置允许Web Components Kit 插件: 4.视频画面预览 ...

  6. Vue 与 Web Components

    Web Components 是一组 Web 原生 API 的总称,允许开发人员创建可重用的自定义组件. 在 Vue 和 Web Components 大体上是互补的技术.Vue 能很好地解析和创建自 ...

  7. Vue3官网-高级指南(十五)Vue 与 Web Components

    Vue3官网-高级指南(十五)Vue 与 Web Components 文章目录 Vue3官网-高级指南(十五)Vue 与 Web Components 1. Vue 与 Web Components ...

  8. Web Components 学习 01 认识 Web Components、一些组件库使用

    什么是 Web Components 开发项目的时候为什么不手写原生 JS,而是要用现如今非常流行的前端框架,原因有很多,例如: 良好的生态 数据驱动试图 模块化 组件化 等 Web Componen ...

  9. 小满Vue3第四十五章(Vue3 Web Components)

    什么是 Web Components Web Components 提供了基于原生支持的.对视图层的封装能力,可以让单个组件相关的 javaScript.css.html模板运行在以html标签为界限 ...

最新文章

  1. 实验进行中:.NET WebAssembly支持
  2. GDCM:gdcm::DataSet的测试程序
  3. 做个PC端打字小游戏
  4. ISIS-三类路由器区域路由
  5. 辣椒app软件测试,testflight辣椒视频
  6. Python爬虫-js案例-上海法院网
  7. EDA 电子设计自动化VHDL系列课程8 – 脉冲信号发生器
  8. linux 卸载aria2,Linux一键安装Aria2 + AriaNg + Filebrowser
  9. linux怎么取消文件隐藏命令,linux命令行下隐藏文件的操作
  10. 从轻测到上线,WeTest与《一起来捉妖》测试方案大公开
  11. 只要400行代码就能自已实现一个绘图机原型固件,esp8266 + micropython 用3d打印机改的绘图机
  12. mac电脑开机进入grub界面
  13. 流媒体-RTMP协议-rtmpdump-flv封装解析(一)
  14. 在win10中AsciiDoc使用plantUML的使用报错:Dot Executable:C:\Program Files\Graphviz2.38 it should be an executa
  15. pe下bootice修复Linux引导,pe下修复引导不成功?这种方法才是最有效的解决方法...
  16. 区块链技术之P2P网络(二)
  17. 转炉炼钢计算机仿真实验报告,转炉侧吹熔炼水模型计算机仿真实验-计算机仿真论文-计算机论文(8页)-原创力文档...
  18. 英语字母c的语言教案,幼儿园小班英语教案:字母C
  19. rabbitmq关于delivery_tag
  20. 手机云盘share php,宝塔面板安装云盘目录列表TCShare – 支持和彩云/天翼云

热门文章

  1. viewpager+fragment避免每次都重新加载
  2. 解决github文件夹有向右的白色箭头并且不能打开的解决办法
  3. 移动计算机专业考试考什么区别,2017中国移动校园招聘考试备考资料—计算机类习题二...
  4. 共享停车位方案,怎样化解城市停车难题!
  5. (java毕业设计源码)基于java(springboot)简历系统源码成品
  6. IOS开发之——AFN-基本使用(01)
  7. C++判断一棵树是否为BST(二叉排序树、搜索树)
  8. 基于FPGA(basys3)的双人对战人机对战五子棋(vivado)课程设计项目
  9. fusionsphere环境搭建_fusioncompute 环境搭建
  10. Blender体积雾