Vize

哲学

⚠️ 正在开发中:Vize正在积极开发中,尚未准备好投入生产使用。以下设计原则描述了项目的愿景和方向。

Vize不仅仅是一个编译器——它是一个关于Vue.js工具应如何工作的设计声明。

维兹的存在

JavaScript生态系统长期以来依赖基于JavaScript的工具来编译、lint、格式化和类型检查JavaScript代码。这造成了一个根本性的瓶颈:处理代码的工具与其处理的代码一样,受运行时限制——垃圾回收暂停、单线程执行以及动态调度开销。

Vize采取了不同的做法。通过在 Rust 中重写整个Vue.js工具链,我们在架构层面消除了这些限制。结果不是渐进式的改善——而是对可能性的彻底转变。

设计原则

1.统一工具链

传统的Vue.js开发需要组装一组独立的工具:编译器(@vue/compiler-sfc)、linter(eslint + eslint-plugin-vue)、格式化器(更漂亮)、类型检查器(vue-tsc)和组件浏览器(Storybook)。每个工具都有自己的解析器、AST 表示和配置格式。

Vize将所有这些统一成一个二元进制。一个解析器。一个AST。一个配置表面。这消除了冗余的解析通道,降低配置复杂度,并确保所有工具共享对代码的一致理解。

@vue/compiler-sfc  +  eslint-plugin-vue  +  prettier  +  vue-tsc  +  Storybook
                              ↓
                            vize

2.作为特色的表现

速度不是可有可无的——它是开发者经验的前提条件。编译需要几秒钟,开发者就会失去流畅。当绒毛处理需要几分钟时,开发者会关闭它。当类型检查耗时,开发者会跳过。

Vize 的设计目的是让每个工具运行得足够快,能够交互式使用:

  • 编译:15,000 SFC 文件,498毫秒(多线程)

  • 格式化:几乎即时完成,即使在大型代码库中也是如此

  • Linting:通过LSP实时反馈

  • 类型检查:无V8开销的增量分析

这得益于Rust的零成本抽象、场地分配以及Rayon的原生多线程。

3.可直接插入兼容性

Vize不会要求你重写代码或改变工作流程。Vite插件是@vitejs/plugin-vue的直接替代品。你现有的Vue组件、 <script setup>、scoped style 和 HMR 都能在不修改的情况下工作。

这一原则延伸到更广泛的生态系统。Vize的Vite插件兼容Nuxt,LSP通过标准协议与VS Code集成。采用Vize应该感觉像是在升级发动机,而不是重建你的汽车。

4.艺术作为建筑

每个Vize箱子的名字都源自视觉艺术中的一个概念——绘画、雕塑和博物馆策展。这不仅仅是一时兴起。命名规范体现了一种理念:代码是一种创造媒介,塑造它的工具应反映所涉及的工艺。

箱子 艺术起源 角色
纸箱 艺术家作品集盒 共享工具——工具箱
松了一口气雕塑表面投影 AST — 代码的结构化表面
骨架 支撑雕塑的骨架 解析器 — 结构框架
鳄鱼乐团 快速手势速写 语义分析——捕捉本质
炼金工房 艺术家工作坊 编译器——变换发生的地方
玻璃柜 玻璃展示柜 装订——揭示作品
正史 理想比例标准 类型检查器——确保正确性
铜绿 老化表面表明质量 衬板——抛光表面
符文 雕刻符号或字母形态 Formatter — 塑造文本
指挥大师 首席指挥 LSP — 策划体验
音乐 博物馆的复数形式 组成画廊——展出作品 的展览
壁画 壁画技法 TUI 框架 — 涂装终端

这种命名系统有实际作用:它使笼子等级更直观。当你看到vize_atelier_dom时,你立刻明白这是一个生产VDOM output工作坊。当你看到vize_patina时,你就知道它在“打磨”你的代码。

雕塑类比

最深刻的类比是软件编译与雕塑之间。考虑雕塑家的工作方式:

1.骨架——雕塑家首先构建骨架:定义基本结构的钢丝骨架。在 Vize 中,解析器(vize_armature)从原始源文本构建结构框架(AST)。

2.浮雕— 雕塑家在骨架上方构建表面,创造relief——一种从平面突出的结构化表面。在 Vize 中,AST (vize_relief) 赋予了原本平面文本结构化的三维形式。

3.鳄鱼画— 在确定最终雕塑之前,艺术家会快速绘制草图(croquis),以理解主题的核心特征。在 Vize 中,语义分析(vize_croquis)是一种快速通过,能够捕捉代码的含义——哪些变量被绑定,哪些表达式有效——而无需承诺编译目标。

4.工作室——雕塑家前往工作室(工作室)创作最终作品。多个工作室可能会制作同一主题的不同版本。在Vize中,编译后端(vize_atelier_domvize_atelier_vaporvize_atelier_ssr)是不同的工作坊,生成相同的AST的不同版本(VDOM、Vapor、SSR)。

5.玻璃柜——完成的作品被放置在玻璃展示柜中,供他人观看。在 Vize 中,绑定(vize_vitrine)是一个透明层,允许 JavaScript 用户访问编译后的输出。

6.博物馆——最终,作品在博物馆展出,供欣赏和研究。在Vize中,组件画廊(vize_musea)是组件的展示、探索和文档展示场所。

优质工艺类比

剩余的箱子则遵循工艺类比:

  • 卡农(字体检查器)——在古典雕塑中,卡农是理想人体比例的标准。波利克莱托斯编写了《卡农》(\Kanon_),定义了完美图形的数学比值。在Vize中,类型检查器强制执行代码的“理想比例”——类型必须正确,道具必须匹配,排放必须符合。

  • 包浆(电焊机)——铜绿是陈年材料表面的表面处理,表明其品质和细致。一座带有丰富包绿的青铜雕塑得到了良好维护。在Vize中,linter会检查代码表面,识别影响其质量的问题。

  • **字形(格式化器)——glyph 是一种雕刻符号或字母形式——可以想象字体中精确且一致的字形。每个符文都有精确的比例和间距。在Vize中,格式化器确保你的代码比例一致且精确。

  • 指挥家(LSP)——指挥大师是指挥大师,负责将乐团编排成统一的演出。在 Vize 中,LSP 服务器将所有语言功能(补全、诊断、格式、导航)协调成统一的编辑器体验。

  • 壁画(TUI)——壁画是一种将颜料涂抹在湿灰泥上,成为墙体本身的一部分的绘画技法。在 Vize 中,TUI 框架将接口直接“绘制”到终端表面。

5.蒸汽优先思维

Vue 3.6引入了Vapor模式——一种编译策略,能够生成细粒度的反应式代码,无需虚拟DOM。Vize从一开始就以Vapor模式为一流的编译目标。

虽然@vue/compiler-sfc逐步增加了Vapor支持,Vize的vize_atelier_vapor从一开始就与vize_atelier_dom并行建设。这意味着共享编译基础设施(vize_atelier_core)设计上能同等地服务两种输出模式。

6.开发商主权

Vize是一个独立的工具链。它不受Vue.js核心团队控制,也没有声称是构建Vue应用的“官方”方式。这是有意为之。

通过保持独立,Vize可以:

  • 在不承担向后兼容性负担的情况下尝试编译策略

  • 比受治理流程约束的官方项目进展更快

  • 作为试验场,展示可能影响官方工具链的理念

  • 为追求最大性能的开发者提供替代方案

同时,Vize也密切关注官方Vue.js规范。目标是兼容性,而非碎片化。

7.站在氧化的肩膀上

Vize并不是孤立存在的。它是更广泛运动的一部分,旨在用系统语言重写JavaScript工具——社区称之为“氧化”。Vize拥抱并整合这一生态系统:

  • OXC— Vize 使用 氧化编译器(oxc)进行 JavaScript 和 TypeScript 解析。OXC提供高性能的JS/TS AST解析,支持vize_croquis(语义分析)和vize_atelier_core(代码生成)。Vize没有重新实现JS解析器,而是委托OXC经过实战验证的实现。

  • oxlint— Vize 设计时考虑了 oxlint。虽然vize_patina处理的是Vue特有的模板填充,但更广泛的JavaScript填充故事最好由oxlint的Rust原生规则引擎来实现。这两种工具是互补的,而非竞争。

  • Corsa— Vize 原生的 TypeScript 执行层,基于 corsa-bind,代表了 Vize 在不通过 JavaScript 托管编译器的情况下,在 JavaScript/TypeScript 类型检查方面所采取的方向。vize_canon 使用该栈进行本地诊断,同时继续提供 Vue 特定的模板类型分析。

  • LightningCSS— Vize 使用 LightningCSS 进行 vize_atelier_sfc 内的 CSS 解析和转换,利用其原生 Rust 的 CSS 处理以实现有作用域样式。

该领域仍有许多未解决的挑战——跨工具AST互操作性、跨语言的增量分析以及编辑器集成一致性。Vize旨在成为Vue.js生态系统中这些问题解决方案的试验场,促进更广泛的氧化运动。

8.与Vite+和OXC的合作

Vite+OXC框架无关的工具链——它们提供通用的JS/TS/CSS捆绑、解析、线条和格式化功能,适用于任何框架。Vize是Vue专用的,设计目的是集成这些生态系统工具,而不是与它们竞争。

Vize 直接依赖 OXC 进行 JavaScript/TypeScript 解析,使用 LightningCSS 处理 Vue SFC 中的 CSS。Vize linter(包绿)和格式化器(字形)处理 Vue 特有的问题(模板指令、SFC 结构、组件约定),这些问题超出框架无关工具的范围。计划与 OXC 进行更深入的集成——例如,将<script>块的 linting/格式化委托给 OXC,而 Vize 则负责 Vue 特有的 <template> 和 SFC 协调层。Vize的Vite插件(@vizejs/vite-plugin)基于Vite构建,设计为@vitejs/plugin-vue的直接替代,完全拥抱Vite生态系统。

作为Vize的作者,我([@ubugeeei)想明确表示:我对这些项目没有对立意图。我完全开放合作,并相信最佳成果来自相互补充的工具。如果双方都需要做出改变以促进更好整合,我愿意携手合作实现。

名字

  • *Vize**(/viːz/)由三个词组成:

  • 宰相— 睿智的顾问或顾问

  • 护目镜— 帮助你清晰看清的东西

  • Advisor— 帮助你做出更好决策的指南

它们共同描述了一种工具,能够sees你的codeadvises你wisely。发音与“breeze”押韵——快速、轻松且清爽。