如何使用Svelte导出WebComponent

275 阅读2分钟

要使用 Vite 和 Svelte 导出一个 Web Component,Svelte 提供了内置支持,可以将 Svelte 组件编译为标准的 Web Component。以下是一个详细的步骤,教你如何使用 Vite 和 Svelte 导出 Web Component。

1. 初始化 Vite + Svelte 项目

首先,使用 Vite 初始化一个 Svelte 项目:

bash
复制代码
npm create vite@latest

选择 svelte 模板并进入项目目录:

bash
复制代码
cd my-svelte-webcomponent
npm install

2. 配置 Svelte 支持 Web Components

在 Svelte 中,你可以通过 customElement: true 选项将 Svelte 组件编译为 Web Component。为了确保 Web Component 的正确打包,我们需要在 Vite 配置中进行一些调整。

3. 创建 Svelte Web Component

创建一个新的 Svelte 文件,如 src/MyWebComponent.svelte,并编写你的组件逻辑:

svelte
复制代码
<script>
  export let name = 'World';
</script>

<p>Hello, {name}!</p>

<style>
  p {
    font-size: 20px;
    color: blue;
  }
</style>

4. 配置 Vite 打包 Web Components

为了将 Svelte 编译为 Web Component,我们需要修改 Vite 配置,并使用 svelte 包的 customElement: true 选项。

修改 vite.config.js

vite.config.js 中,添加如下配置:

javascript
复制代码
import { defineConfig } from 'vite';
import { svelte } from '@sveltejs/vite-plugin-svelte';

export default defineConfig({
  plugins: [svelte({
    compilerOptions: {
      customElement: true, // 将 Svelte 组件编译为 Web Component
    }
  })],
  build: {
    lib: {
      entry: './src/MyWebComponent.svelte',
      formats: ['es'],
      name: 'MyWebComponent',
      fileName: (format) => `my-web-component.${format}.js`
    }
  }
});

这里做了几件事:

  • formats: ['es']:设置了导出的格式,可选的格式有['amd', 'cjs', 'es', 'iife', 'umd']
  • customElement: true:将 Svelte 组件编译为 Web Component。
  • build.lib:设置打包输出为一个库形式,导出 ES 模块格式的文件。
  • entry:指定 Web Component 的入口文件。

5. 打包 Web Component

运行以下命令来进行打包:

bash
复制代码
npm run build

Vite 会在 dist 文件夹下生成打包好的 my-web-component.es.js 文件,你可以将它作为一个 Web Component 在其他项目中使用。

6. 在 HTML 中使用 Web Component

你可以在任何 HTML 文件中使用这个生成的 Web Component。新建一个 index.html 文件,将生成的文件引入,并使用自定义元素 <my-web-component>

html
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Svelte Web Component</title>
</head>
<body>
  <my-web-component name="Svelte"></my-web-component>

  <script type="module" src="./dist/my-web-component.es.js"></script>
</body>
</html>

7. 运行并测试

将这个 HTML 文件打开在浏览器中,你会看到 Svelte 编译生成的 Web Component 工作正常,显示了 Hello, Svelte!


总结

通过 Vite 和 Svelte,你可以非常方便地将 Svelte 组件编译为标准的 Web Component。只需要设置 customElement: true,并配置 Vite 打包为库格式,即可快速导出 Web Component 并在任何地方使用。

这样你就可以用 Svelte 编写复杂的 UI 组件,同时将它们作为 Web Component 在各种项目中复用,无论项目是否使用 Svelte。