用svelte.js开发web components

本文介绍了如何使用svelte.js开发web components,包括web components的概念,搭建项目的步骤,实际应用中的方法,以及在开发过程中需要注意的坑点,如rollup配置和模块转换。svelte.js与web components的结合提供了轻量且高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

最近有点闲,看到svelte.js,一个挺好玩的框架,搭配rollup开发相当丝滑,api就我而言,比vue、react那些都好用~
尤大说的比较中肯,它属于小而美的类型,构建复杂项目可能会有压力;但用来做小项目,活动页,编译可独立分发的 web components等,则很合适,今天我那它做个组件尝尝味道。


一、web components是什么?

其实这玩意就是自定义html组件,等于你创建了个video标签,并实现了标签内部的功能逻辑,可在多处复用。关于它的文档在这里,还有阮一峰的简单入门示例,可自行查阅。

二、使用步骤

1.起步

svelte.js 搭建项目,其实就装几个包,简单配置一下rollup就完事的了,没啥好说的。
官方也有提供了template工程,懒癌发作就clone或者下载项目即可。

npx degit sveltejs/component-template info-card
// or 直接下载
https://github.com/sveltejs/component-template

2.构建示例

<svelte:options tag="info-card" />
<div id="app" bind:this={self}>
  <h1 class="name">{name}</h1>
  <button on:click={sayMyName}>呼唤我的名字</button>
</div>

<script>
  export let name
  export let self
  function sayMyName() {
    alert(name)
    // 呼唤结束,你还可以自定义事件,冒泡向上层传递信息
    self.dispatchEvent(new CustomEvent('done', {
	  detail: 'anything'
	}))
  }
</script>

<style>
#app .name {
    color: red;
}
</style>

然后npm / yarn build一下,引入打包好的js,你就可以直接使用这个组件啦

// html
<info-card name="MO"><info-card/>
<script>
  // 监听事件
  document.querySelector('info-card').addEventListener('done', () => {
    // Do something
  })
</script>

3. 实际应用

在项目中使用还是很便利的,基本就是引入模块文件,插入自定义标签,通过属性传参即可
在这里插入图片描述

4.踩坑小点

用svelte.js开发web components,rollup.config.js的配置里必须写好customElement的配置。
然而baidu的结果绝大多数是错的了,这里更正一下,不然打包会报错的。
还有,rollup的模块机制是ESmodules,不支持require,import第三方插件时,需要用插件转换才能用,记得处理一下

// rollup.config.js
import svelte from 'rollup-plugin-svelte'
import resolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs'
import babel from 'rollup-plugin-babel'
import { uglify } from 'rollup-plugin-uglify'
...
export default {
...
  plugins: [
    babel({
      babelrc: false,
      exclude: "node_modules/**",
      presets: [
        [
          '@babel/preset-env'
        ],
      ]
    }),
  	svelte({
	  compilerOptions: {
		customElement: true
	  }
	}),
	//(resolve要放在commonjs之前)
	resolve(),
	commonjs({
	  include: 'node_modules/**'
 	}),
	uglify()
  ]
}

另外,要注意web components的兼容性问题,要确定你的项目可用,再去尝试,不然是会gg的。
在这里插入图片描述

(数据来源:caniuse.com


总结

用svelte.js开发web components很般配,省却用原生编写的大量dom操作代码,响应式的框架和大量可选npm库,打包体积远小于用vue等流行框架,做到了轻量且实用的目的,值得一试~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值