news 2026/6/15 18:18:20

使用Vite#x2B; Lit 构建webcomponent 组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用Vite#x2B; Lit 构建webcomponent 组件

Vite+Lit.js 构建Web Component

web component作为前一个时代的方案,在特定场景下确有不一样的妙用
,在维护前后端不分离的项目,web component 是为数不多的选择,整理一下使用Lit 构建自己的web component组件库为传统项目提提速的过程。

使用vite 创建项目

Vite 里带了Lit模板,我们这里选用Lit+ts模板
pnpm create vite

目录结构
  • src
    • hello
      • index.ts // 具体组件
    • index.ts // 组件收集
  • vite.config.ts 打包配置!
  • index.ts // 组件注入!

适用于构建基础组件库,不适用太复杂的逻辑,利用web-components 自带的样式隔离等,可以很好的避免被上下文干扰。

构建打包项目

编写入口文件,注入组件
import * as allComponents from './src/main.ts' const components = allComponents const toKebabCase = (str: string): string => { return str .replace(/([a-z0-9])([A-Z])/g, '$1-$2') .replace(/([A-Z])([A-Z])(?=[a-z])/g, '$1-$2') .toLowerCase() } if (typeof window !== 'undefined') { (window as any).WebComponents = components Object.entries(components).forEach(([name, component]) => { const elementName = toKebabCase(name) const fullElementName = 'xk-' + elementName // 这里定义了全局组件名开头 if (!customElements.get(fullElementName)) { customElements.define(fullElementName, component) } }) }

除了组件,也可以在这里注入全局方法等

构建打包脚本

使用vite 来构建很简单。

/* by 01130.hk - online tools website : 01130.hk/zh/generateicpwallets.html */ import { defineConfig } from 'vite' import { resolve } from 'path' import { fileURLToPath, URL } from 'node:url' export default defineConfig({ build: { lib: { entry: resolve(fileURLToPath(new URL('.', import.meta.url)), 'index.ts'), name: 'WebComponents', fileName: (format) => `lit-web-components.${format === 'es' ? 'js' : 'umd.js'}`, formats: ['es', 'umd'] }, outDir:"../dist/js", // 打包输出目录 rollupOptions: { output: { extend: true, assetFileNames: 'lit-web-components.[ext]', manualChunks: undefined, compact: true, // 紧凑输出 }, treeshake: { moduleSideEffects: false, propertyReadSideEffects: false, tryCatchDeoptimization: false }, }, sourcemap: false, // 移除 source map minify: 'terser', target: 'es2022', terserOptions: { compress: { drop_console: true, // 移除所有 console drop_debugger: true, // 移除 debugger pure_funcs: ['console.log', 'console.info', 'console.debug', 'console.warn'], // 移除指定的纯函数 unused: true, // 移除未使用的代码 dead_code: true, // 移除死代码 conditionals: true, // 优化条件语句 evaluate: true, // 计算常量表达式 booleans: true, // 优化布尔值 sequences: true, // 连接连续语句 switches: true, // 移除重复的 switch 分支 reduce_vars: true, // 减少变量引用 collapse_vars: true, // 内联变量 passes: 3 // 多次压缩以获得更好的效果 }, mangle: { toplevel: true, // 混淆顶级作用域 reserved: ['lit', 'LitElement', 'html', 'css', 'customElements'] // 保留重要的库名称 }, format: { comments: false // 移除所有注释 } } }, resolve: { alias: { '@': resolve(fileURLToPath(new URL('.', import.meta.url)), 'src') } } })

编写一个简单的组件

src/hello/index.ts

/* by 01130.hk - online tools website : 01130.hk/zh/generateicpwallets.html */ import { LitElement,html,css } from "lit"; import { property } from "lit/decorators.js"; export class Hello extends LitElement{ @property({type:String}) text='Hello,Web Component' @property({type:String}) color='#222' static style=css` :host{ } ` render(){ return html` <span style="color:${this.color};">${this.text}</span> ` } }
在main.ts 里导入
export {Hello} from "./hello/index"
打包输出结果

lit-web-components.umd.js 16.92 kB │ gzip: 6.44 kB
注意:这里包含了lit 本身这个库,

使用

打包构建带入lit本身的库(建议) ,使用就很简单了

引入 <script src="./js/lit-web-components.umd.js"></script> 使用 <xk-hello color="red"> </xk-hello> </br> <xk-hello text="hello world"> </xk-hello>
输出效果和Dom

实际应用和思考

web component 可以为传统的老项目注入现代化开发能力,Lit 则大大减轻了这个过程,经过我在项目中的深入使用,明显带来的好处

  • 样式隔离: 自带的样式隔离和行为,不会被之前的公共css等影响。减少了心智负担
  • 复用:沉淀了一大批组件,快速构建页面,统一了整站的交互性和ui 一致性。
  • 跨框架: 后续升级框架时,之前的组件依然能用。减少了升级成本,还能保持原来的ui细节。

缺点

  • 额外的学习成本:可以使用ai 来开发维护
  • SEO影响 对于组件内部的一些隐藏属性,可能会影响SEO:建议增加描述,关键内容通过Slot可以消除

总结

如果无法对大型项目重构,大型项目开发起来又很痛苦,尝试webcomponent 方案吧。升级平滑,组件复用,还有样式隔离,插槽等现代化概念。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:02:11

收藏!35岁程序员转行大模型实录:2025年换道超车,告别中年危机

各位程序员兄弟、姐妹&#xff0c;如果你已过30岁&#xff0c;正被行业里热议的“中年危机”裹挟&#xff0c;对职业前路感到迷茫&#xff0c;甚至偶尔怀疑自己是否还能跟上技术迭代的节奏——那这篇来自35岁毅然转行大模型领域“过来人的分享”&#xff0c;你一定要看到最后。…

作者头像 李华
网站建设 2026/6/15 12:04:41

好写作AI:学术严谨性守护,文献引用与格式自动化校对

还在为一条条核对文献引用而焦虑&#xff1f;或是在投稿前夜&#xff0c;仍奋战于调整数百条参考文献的格式&#xff1f;别再把宝贵的时间&#xff0c;耗费在机械的“体力活”上。好写作AI&#xff0c;现已化身为你的“学术规范助手”&#xff0c;让自动化校对技术&#xff0c;…

作者头像 李华
网站建设 2026/6/15 12:03:47

好写作AI:克服写作拖延,72小时完成论文核心章节

面对Deadline步步紧逼&#xff0c;核心章节却仍是一片空白&#xff1f;拖延的焦虑与时间的压力&#xff0c;是否让你陷入“想写却写不出”的恶性循环&#xff1f;好写作AI深知这种困境&#xff0c;并为你设计了一套 “72小时高效冲刺方案” &#xff0c;将庞大的写作任务拆解为…

作者头像 李华
网站建设 2026/6/15 12:03:13

Win部署Open-AutoGLM常见报错汇总,一文解决80%安装失败问题

第一章&#xff1a;Win部署Open-AutoGLM常见报错概述在Windows系统上部署Open-AutoGLM时&#xff0c;开发者常因环境配置、依赖版本或权限问题遭遇运行异常。该框架对Python环境、CUDA支持及第三方库版本有较高要求&#xff0c;稍有疏漏即可能引发启动失败或功能异常。环境依赖…

作者头像 李华
网站建设 2026/6/15 15:03:41

Open-AutoGLM本地部署实战(从环境搭建到流程自动化全指南)

第一章&#xff1a;Open-AutoGLM本地部署概述Open-AutoGLM 是一个基于 AutoGLM 架构的开源自动化自然语言处理框架&#xff0c;支持本地化部署与私有化模型调用。其设计目标是为开发者提供低延迟、高安全性的本地大模型推理能力&#xff0c;适用于数据敏感场景下的文本生成、问…

作者头像 李华