Skip to main content

开发建议

总结​

可以用svelte开发一个完整功能的组件,然后用lit 包装一下,给到其他框架使用?

如果全部使用lit开发完整的功能性组件,太难了

  1. 几乎没有热门的库可以用
  2. 定制起来更是麻烦
  3. 不能使用tailwindcss, lit 会破坏,即使在单个项目中使用成功,打包后给其他框架也会破坏,因为css单独产出,对lit无效
  4. 写起来有种原生开发的感觉

是的,你可以使用 Svelte 开发一个完整功能的组件,然后通过 Lit 将其包装起来,以便在其他框架中使用。这种方法可以让你利用 Svelte 的高性能和简洁性,同时也能利用 Lit 的灵活性和广泛的兼容性。

步骤概述​

  1. 创建 Svelte 组件
  2. 将 Svelte 组件编译为自定义元素
  3. 使用 Lit 包装该自定义元素

详细步骤​

1. 创建 Svelte 组件​

首先,创建一个简单的 Svelte 组件。例如,一个计数器组件:

<!-- Counter.svelte -->
<script>
export let count = 0;

function increment() {
count += 1;
dispatchEvent(new CustomEvent('count', { detail: count }));
}
</script>

<button on:click={increment}>
Count: {count}
</button>

2. 将 Svelte 组件编译为自定义元素​

使用 Svelte 的自定义元素编译选项,将 Svelte 组件编译为自定义元素:

// rollup.config.js
import svelte from 'rollup-plugin-svelte';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';

export default {
input: 'src/main.js',
output: {
format: 'iife',
file: 'public/build/bundle.js'
},
plugins: [
svelte({
compilerOptions: {
customElement: true
}
}),
resolve(),
commonjs()
]
};

然后,在你的入口文件中注册自定义元素:

// src/main.js
import Counter from './Counter.svelte';

customElements.define('svelte-counter', Counter);

3. 使用 Lit 包装该自定义元素​

接下来,使用 Lit 创建一个包装组件,将 Svelte 自定义元素嵌入其中:

// MyElement.js
import { LitElement, html, css } from 'lit';
import { customElement } from 'lit/decorators.js';
import './path-to-svelte-counter.js'; // 引入编译后的 Svelte 自定义元素

@customElement('my-element')
class MyElement extends LitElement {
static styles = css`
/* 你的样式 */
`;

render() {
return html`
<svelte-counter @count=${this.handleCount}></svelte-counter>
`;
}

handleCount(event) {
console.log('Count:', event.detail);
}
}

使用 Lit 包装的组件​

现在,你可以在任何支持 Web Components 的框架中使用这个由 Lit 包装的组件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lit and Svelte</title>
<script type="module" src="./path-to-my-element.js"></script>
</head>
<body>
<my-element></my-element>
</body>
</html>

总结​

通过这种方式,你可以利用 Svelte 和 Lit 的优势,创建高性能且易于维护的组件,并在各种框架中复用这些组件。这种方法确保了组件的独立性和灵活性,同时也简化了跨框架的集成过程。