零框架运行时 Core · 原生 RPC · OpenProps + Lit · 单 deno.json
2026-05-02
v0.5-alpha-0 不做新功能。它做减法。
从 v0.3.2 到 v0.4.0,我们加了 SSG、Islands、DSD、PWA、Serverless API——90 commits,3904 行新增。到 v0.5-alpha-0,问题变成了:这些东西能不能不这么复杂?
KissElement 是一个"零框架运行时"的 Custom Element base class,用 this.root.innerHTML =
String(this.render()) 更新 DOM。这个设计有四个问题:
要解决这些问题需要重写一个 lit-html 级别的模板引擎——不值得维护。任何想"零框架运行时但又有声明式模板"的方案,最后都会变成重写 Lit。
之前 core 做了太多事:Vite 插件 + KissElement + LitElement re-export + 路由扫描 + DSD 渲染。
现在 core 只做一件事:构建/SSR 基础设施。不再导出:
结果:@lessjs/core 的运行时依赖从两个(lit + signals)变成零。
RPC 控制器本质上是 fetch + AbortController 的包装。它曾经因为用了 Lit 的 ReactiveController 接口而声明了 peer dep。
v0.5-alpha-0 改为 structural typing——RPC 自己声明兼容的接口,任何有 addController/requestUpdate 的对象都可以用。Lit、原生
HTMLElement、或其他框架都行。
之前根目录和 docs/ 各有一个 deno.json,依赖分散在两处维护。
现在合并到单根 deno.json,加上 vendor: true,deno install
一站式管理所有依赖。
Lit 是 Web Component 最成熟的工具库。less-ui 的九个组件已经用 Lit 写好、无 bug、正在跑。15KB gzip 不可见成本(被所有组件共享)。
Lit 现在是 @lessjs/ui 的实现细节。用户写 <less-button
variant="primary"> 不需要知道里面有 Lit。需要自定义组件的用户可以自己写 class extends HTMLElement,和 less-ui 组件同页面共存。
core 负责 DSD-first 渲染与 SSG 管线;Lit 组件通过 @lessjs/adapter-lit
接入。后续 Trust Release 必须补齐 adapter 测试与插值转义,不能把 adapter 风险伪装成 core
的能力。
所有颜色和阴影 token 从硬编码 hex 改为 OpenProps CSS 变量。CSS 自定义属性天然穿透 Shadow DOM,零构建步骤。
@lessjs/core — 纯构建/SSR 工具 [零框架运行时]
@lessjs/rpc — fetch + AbortController [零框架运行时]
@lessjs/ui — OpenProps + Lit 组件库 [仅 UI 层]
create-kiss — 脚手架 [CLI 工具]
Vite 8.0.10,Deno 2.6,单根 deno.json。CI 全绿。