LessJS 是一个 Deno-first、Web Standards-first 的现代全栈框架,面向 static-first 应用。
它把 Declarative Shadow DOM、Web Components、Island Upgrade、SSG、Hono serverless APIs 和 Vite 组合成一个很小的框架表面。LessJS 的目标不是隐藏 Web 平台,而是让平台本身变得更好用。
LessJS 的前身是 KISS 框架(Keep It Simple, Stupid),延续了同样的哲学。
很多现代前端栈把 HTML 变成运行时产物。LessJS 反过来,从 HTML 和 Web 平台本身出发:
- 在构建期渲染语义化 HTML
- 用 Declarative Shadow DOM 保留组件边界
- 只升级真正需要 JavaScript 的交互岛屿
- 优先使用原生 Web APIs,而不是先制造框架抽象
- 让 serverless APIs 靠近路由树
- 通过 Deno-first 工作流运行、构建和发布
deno run -A jsr:@lessjs/create my-app
cd my-app
deno task dev要求:
- Deno 2.7 或更新版本
- 支持 Declarative Shadow DOM 的现代浏览器
LessJS 不只追求"代码少"。它是一组架构约束:
| 字母 | 约束 | 含义 |
|---|---|---|
| K | Knowledge | 优先使用构建期知识,而不是运行时发现。 |
| I | Isolated | 客户端 JavaScript 应该待在 island 和组件边界内。 |
| S | Semantic | HTML 仍然是主要文档格式,也是可访问性的基础。 |
| S | Static | SSG 产物应该能作为静态文件部署,serverless APIs 是可选动态边缘。 |
当前渲染模型:
Route module
-> Web Component render()
-> Declarative Shadow DOM HTML
-> static HTML file
-> optional island client chunk
-> Custom Element upgrade in the browser
这和完整客户端 hydration 模型有意不同。LessJS 不尝试在客户端重建应用树,而是在需要交互的位置升级 Custom Elements。
当前版本 v0.5.3 是 static-first DSD + Island Upgrade 路线的 Trust Release。
| 包 | 职责 | 当前版本 |
|---|---|---|
@lessjs/core |
Vite 插件、路由扫描、DSD 渲染、SSG 管线 | 0.5.3 |
@lessjs/ui |
基于 Lit 的 Web Component 组件库和 package islands | 0.5.2 |
@lessjs/rpc |
轻量 fetch/RPC controller 工具 | 0.3.0 |
@lessjs/adapter-lit |
可选 Lit SSR 适配器 | 0.2.0 |
@lessjs/create |
项目脚手架 CLI | 0.4.5 |
历史包 @lessjs/vite 和 @lessjs/ssg 已废弃。
my-app/
app/
routes/
index.ts
about.ts
api/
status.ts
islands/
counter.ts
components/
shell.ts
deno.json
vite.config.ts
页面是文件路由。API 文件导出 Hono apps。Islands 是注册 Custom Elements 的客户端 chunk。
import { css, html, LitElement } from 'lit';
export const tagName = 'home-page';
export default class HomePage extends LitElement {
static override styles = css`
:host {
display: block;
padding: 2rem;
}
`;
override render() {
return html`
<main>
<h1>Hello from LessJS</h1>
<counter-island></counter-island>
</main>
`;
}
}
customElements.define(tagName, HomePage);LessJS 应用的生产构建只需要一个命令:
deno task build内部仍然保留 SSR bundle、island client chunks、SSG rendering 三个可观测阶段;这用于调试和 CI 定位,不再是用户 quickstart 的主路径。
完整仓库可运行:
deno task build:all
deno task test
deno task lint本仓库是 Deno-first。Vite 通过 deno run -A npm:vite 执行;Node/npm/npx 不是主工作流的一部分。
- 文档站:lessjs.com
- 路线图:docs/app/routes/roadmap.ts
- 架构决策:docs/decisions
MIT