哲学
⚠️ 正在开发中: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_dom、vize_atelier_vapor、vize_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你的code并advises你wisely。发音与“breeze”押韵——快速、轻松且清爽。