跳到正文
Hacker News· joe-excom·· 9 天前AI 评分28

Show HN:Nucleus——以文档为状态、由类 CSS 规则驱动的 Web 应用

Show HN: Nucleus- web apps where document is the state, driven by CSS-like rules

AI 导读

Nucleus 是一套以 HTML 文档本身为应用状态、用类 CSS 规则(Quark)驱动文档变更的 Web 应用架构,配套 NucleusKit 自定义元素、Valence.css 与 Neutron,整套压缩后约 50kb。其演示 Todo 应用不到 50 行代码、零应用 JS、无构建流程,采用 MIT 许可开源并获生产环境采用。

正文 · AI 翻译

富 HTML 应用 - 实现新颖的 ASO 架构模式。

在线演示:完全 RESTful 的 Todo 应用 - 不到 50 行代码,零应用 JS,无需构建流程。

todo-app.html todo-app.quark todo-app.css

你的 HTML 就是应用!即插即用的自定义元素,每个元素只承担单一职责,然后编写由 CSS 派生的规则来观察页面并做出相应反应。真相之源——你的 HTML——正是浏览器所绘制的内容。

没有组件,没有虚拟 DOM,没有藏在 JS 内存中的第二份应用状态副本,也没有构建流程。

它与现有 UI 解决方案有何不同

  • 回到未来 🚗⚡️ 欢迎回到构建静态 HTML5 应用的时代。告别那些编译成 HTML 的复杂 JavaScript 应用,稍作喘息。
  • 极少甚至无需 JavaScript 绝大多数 UI 场景下你不再需要编写 JS。对于复杂场景,你仍可调用自己的纯函数。
  • 原生++ 这是真正的 HTML。还配有一位独立且协同的宾客:Quark。
  • 没有魔法 没有特殊框架、构建流程、渲染奇技,也没有“JS 里的 HTML”/“HTML 里的 JS”这类 DSL。
  • 渐进增强 可直接嵌入现有的静态/服务端渲染站点。Nucleus 元素和 Quark 也可独立使用。
  • 完全可组合 模板、模板化、行为和自定义逻辑全部解耦且健壮。
  • 响应式状态机 为你的业务逻辑提供简单、可靠、声明式的语法——Quark。
  • 没有协调开销 无需为状态/DOM 保留大量内存副本,无需在每次状态变化时重建、与 DOM 进行 diff、重新编译。
  • 轻量 所有 Nucleus 元素 + Quark + Neutron 的占用(压缩后仅略超 ~50kb)比某些 UI 框架的核心本身还要小。

想看看它在生产级应用中的运行效果,请参见 Wrenfield——一个虚构的全功能电商网站,具备 SSG、SPA、Web AR/3D 模型、WebAuthn、视图过渡、触摸手势等功能。在移动端试用可获得类原生体验。Wrenfield 的构建没有使用应用 JS,也没有 UI 构建流程。

技术栈包含什么

  • NucleusKit 元素 不断扩充的即插即用自定义元素目录,包括:抽屉、标签页、表格、懒加载视图、表单、路由、通行密钥、数据获取等。
  • Quark 就像 CSS,但用于文档变更。选择元素、绑定数据、生成列表、连接事件,并用简单规则而非命令式代码驱动状态转换。
  • Valence.css 语义化、无类名的 CSS,兼顾原生元素和自定义元素,带有主题、明暗配色方案和设计令牌。专为轻松即插即用而设计。可选。
  • Neutron 用于编写上述元素的小型 JS 工厂。仅当 NucleusKit 目录缺少你所需的内容时才使用它。可选。

每个部分都独立存在。可以在现有网站上使用一个元素,或者将整个技术栈组合成一个完整的单页应用。nucleus-kit 将所有内容打包在一个导入之后;如果你发现自己只使用了少数几个元素,可以改为按需安装那些包(@excom/content-drawer、@excom/quark-sheet……),跳过其余的。

团队为何选择它

  • 显著减少应用代码 这之所以可能,主要有两个原因。首先,因为 NucleusKit 元素完全可组合、可配置、可控制,它们很可能与大多数使用它们的应用所期望的体验兼容;你不太可能需要自己构建。其次,Quark 使得大多数自定义无需引入 JavaScript。
  • 没有组件 这种架构中没有“组件”概念。这使得应用各部分可以最大程度地复用和组合,因为没有地方会用紧密耦合的视图来困住逻辑。
  • 单一事实来源 实时标记就是主要应用状态,因此一整类 bug(“UI 与模型不一致”)不可能存在。
  • 完全可检查 打开开发者工具,整个应用就在你眼前:每个值、每个绑定、每个过渡。状态就是文档/DOM,因此一切都在检查器中清晰透明,可供查看、修改和调试。
  • 默认无障碍 声明式 & ARIA 状态就是状态……而不是某人忘记更新的镜像。
  • 对人类和机器友好 检查此站点即可看到其声明式特性。不再有绑定到无法追踪的 JavaScript 的 <div> 大杂烩。自定义元素造就了极其声明式的文档。一个可读、可寻址、可序列化的页面,是代码生成、AI 辅助编辑和可靠人工审计的理想目标。工具可以推理屏幕的确切状态,而不是推断组件树。同样,手动编写和调试 UI 代码从未如此简单。
  • 声明式业务行为 你的绝大多数专有行为都以简单配置的形式存在,而不是埋藏在命令式意大利面代码中。

它的优势所在

内容丰富的网站、复杂的数据驱动业务规则、静态/服务器渲染页面的渐进增强、嵌入式用户体验。边界情况见局限性。

Nucleus Stack 还开启了此前任何 UI 技术都难以轻松实现的新可能性:

  • 零构建工具的 UI(例如即时生成)
  • 用于 LLM UI 构建的声明式 & 可审计目标
  • 富用户体验的程序化组装(如 CMS)
  • 静态/遗留 SSR 站点的增量升级
  • 资源受限、安全或沙盒化的 Web UI(尤其是在脚本需要被验证或限制的场景,如 ATM)
  • 嵌入式用户体验(例如为 markdown 增加嵌入式功能)

吃自己的狗粮有营养

整个站点——包括复杂部分,如文本编辑器——完全仅使用这一 UI 技术栈构建。由于这些技术的声明式设计,检查文档将让你非常深入地理解应用的组成和功能。打开你的检查器!安装 Nucleus DevTools 还会提供更深入的洞察。

Nucleus Stack 目前正由合作公司在生产环境中使用。

免费 & 开源

Nucleus Stack 采用 MIT 许可证,并将保持免费和开源,提供长期支持。这得益于其贡献者和赞助者。

欢迎贡献代码。

从这里开始

  • 快速开始 - 五分钟内构建一个可运行的页面。
  • 核心概念 - 一次坐下来就能理解的心智模型。
  • 使用元素 - NucleusKit 目录以及元素的行为方式。
  • 编排 - 熟悉 Quark。
  • 样式 - Valence.css 主题、令牌和状态驱动的 CSS。
  • 构建视图 - 构建一个真实应用:路由、视图、懒加载。
  • 其他指南 - 业务逻辑、创建元素、最佳实践、故障排除、使用代理进行调试
  • 深入探索 - 这一切背后的架构,献给好奇者和怀疑者。

来源:Hacker News · nucleus.excom.dev