0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ViteConf 2023:Vite即将Rust化挑战

jf_wN0SrCdH 来源:浮之静 作者:lencx 2023-10-07 10:28 次阅读

ViteConf 干货满满,尤大的分享中最值得关注的就要数 Rolldown 了,它为 Vite 现有痛点提供了新的解决方案。

Vite

Vite[2] 是支撑着全球增长最快的前端生态系统的下一代构建工具。

npm 每周下载量:7,200,000+

GitHub Stars:60,000+

2171c40e-6455-11ee-939d-92fbcf53809c.png

218425d6-6455-11ee-939d-92fbcf53809c.png

Vite 生态

Vite 正在迅速崛起为一个共享的基础平台,吸引着越来越多的项目在其基础上构建和发展。令人兴奋的是,这些项目不仅仅满足于基础应用,而是在各自的领域中进行着前所未有的创新。

Vite 妥善平衡了低级别复杂性的抽象和高级用户及框架的灵活性。这不仅降低了入门门槛,提供了友好的开发体验,同时也确保了对于高级应用和多变需求的充分支持。

Storybook v7 提供一流的 Vite 支持:预先捆绑以提高速度、零配置设置、无需 Webpack 以及更小的安装大小(First-class Vite support in Storybook[3])

Angular v16 使用 Vite 作为开发服务器(Angular v16 is here![4])

Preact[5] 在 6 月份将默认工具切换为 Vite,推荐使用 create-vite 来快速开始一个项目

Redwood v6 完全构建在 Vite 之上(RedwoodJS Vite Configuration[6])

Bun v0.7 开始支持 Vite(bun vite support[7])

VitePress[8] 静态网站生成器

与 Remix[9] 合作,探索向 Vite 迁移,已取得重大进展

...

Vite 痛点 & 挑战

痛点

相对缓慢的生产构建速度:目前仍使用 rollup 作为生产构建,本地开发使用 esbuild 或 Bun

开发与生产环境之间的不一致:Vite 使用混合策略。开发使用 esbuild 预构建,使用 Native ES 模块提供源代码;生产使用 Rollup 来捆绑所有资产,CommonJS 在处理和转换时有时会出现轻微的不一致,最终导致难以调试。

开发过程中存在未捆绑 ESM 的网络开销:如果开发者项目中包含大量未捆绑 ESM 时,网络开销会大幅影响初始页面加载速度。

混乱的 SSR 外部问题

对代码块分割的有限控制:与 ES 构建相比,虽然 Rollup 已经提供了很大灵活性,但与 Webpack 的完全支持自定义相比,还是有些差距

缺乏首方模块联合(First-party Module Federation)支持:了解更多 Module Federation[10]

挑战

大多数问题需要在打包工具(bundler)层面解决(Vite 内部有两个捆绑器:esbuild 和 Rollup)

esbuild(或 Bun)速度极快,但:

对构建资源优化的控制非常有限:比如控制块的分割方式

插件 API 不够灵活:比如当尝试将多个插件连接在一起以处理同一文件类型时

Rollup 成熟且灵活,但:

与原生打包工具相比仍然较慢

ESM/CJS 交互操作的处理可以改进

两个打包工具都无法完全替代对方,并且存在微妙的行为不一致性

Rolldown

尤大透露团队正在开发 Rolldown,它是 Rollup 的 Rust 移植版。目的并不是为了取代现有的工具 esbuild 或 Rollup,只是为了更好地满足一些特定需求,使 Vite 用户受益。

专注点:在尽可能与 Rollup 兼容的前提下,重点关注性能

目标:在对终端用户影响最小的前提下,在 Vite 中替换 esbuild 和 Rollup

它将为 Vite 提供:

显著更快的生产构建速度

更强的开发/生产一致性

更稳健的 SSR 依赖处理

更多关于代码块分割的控制

当然,这将是一项庞大的工作!

目前状态:初步的工作进行中!(计划在年底前开源)

核心贡献者是前 rspack[11] 团队成员(rspack 是字节开源的一个基于 rust 实现的前端打包工具,对标 Webpack)

与 rspack 团队合作,在 OXC[12] 基础上进行建设(Oxc 是一套为 JavaScript 和 TypeScript 创建的高性能工具,基于 Rust 实现。它正在构建一个解析器、linter、格式化程序、转译器、压缩器、解析器……)

与 @lukastaegert[13](rollup 核心维护者) 合作以确保与 Rollup 的一致性

如果 Vite 对你的使用场景来说过于庞大,Rolldown 当然也可以作为一个独立的依赖项使用。它还可以提高 Vitest[14] 和 Nitro[15] 的性能。

Vite Roadmap

计划将通过四个阶段逐步完善和升级打包和构建过程,最后将 Vite 的一部分功能通过 Rust 和 Rolldown 进行重写或优化,以提高整体性能和提供更多的构建模式。

阶段 1:基础打包

替换 esbuild 用于依赖预打包:CommonJS & 仿 ESM(faux-ESM)兼容性

阶段 2:高级打包

与 Rollup 功能对齐:插件兼容性、Tree-shaking、高级代码块分割控制等

阶段 3:内置转换

TypeScript

JSX

代码压缩(minification)

语法降级(syntax lowering)

阶段 4:使用 Rust 重构 Vite

Rolldown 暴露插件容器作为 API

Vite 引入一个以 Rolldown 为依赖的 Rust 核心

使用 Rust 重构 Vite 内部关键插件和 ssrLoadModule 转换

提供与未捆绑 ESM(unbundled ESM)相对的全包模式(full-bundle mode)

Vite 版本日志

Vite 4.0 (2022.12)

升级到 Rollup 3(3.0.0 changelog[16])

最低 Node.js 要求:Rollup 现在至少需要 Node 14.18.0 来运行。

插件和 API 更改:许多插件上下文函数和插件钩子已被移除或修改。

新特性:包括按块调用 output.banner/footer/intro/outro 的函数,插件可以访问完整的块图表等。

构建输出:增加了关于动态导入在 CommonJS 输出中的处理,允许控制动态导入在生成 CommonJS 输出时是以 import(...) 还是包装过的 require(...) 形式被输出。

警告和弃用:一些之前被弃用的特性已被移除,而其他一些特性开始显示弃用警告。

错误处理:改进了Rollup 抛出的错误信息的清晰度和一致性。

性能优化:避免在发出数千个资产时的性能问题。

就重大变更而言,这是一个小得多的主版本。目标是为了最大化利用生态,而推出的一个稳定版。CI 确保与下游项目的兼容性,以便更改对最终用户的影响尽可能小。

使用 SWC 支持的 React 插件 @vitejs/plugin-react-swc[17]

快速刷新(比 Babel 快约 20 倍)

启用自动 JSX 运行时(Babel 在 v7.9.0 版本中引入此特性,相关阅读:Introducing the New JSX Transform[18] 和 A new JSX transform[19]

Vite 4.1 (2023.02)

同步 Rollup 和 esbuild 版本

react 插件变化显著

plugin-react 修复了很多 HMR bug

支持 SWC 的 Vite 版本,添加了对 SWC 插件的支持。

Vite 4.2 (2023.03)

改进源代码调试体验

修复 Chrome 开发工具在显示相对路径时的异常

通过 x_google_ignoreList 从堆栈跟踪中排除某些文件的源映射,做到错误堆栈追踪仅关注你在意的部分(相关阅读:vite server.sourcemapIgnoreList[20] 和 The x_google_ignoreList source map extension[21])

Vite 4.3 (2023.04)

与 Vite 4.2 相比,4.3 带来了全面的速度提升(Vite 4.3 is out![22])。

2199f370-6455-11ee-939d-92fbcf53809c.png

Vite 4.4 (2023.07)

实验性支持 Lightning CSS[23](基于 Rust 实现的 CSS 编译工具链),注意:它目前与其他 CSS 处理器互斥。

create-vite[24] 添加 solid 和 qwik 模板。

21a93420-6455-11ee-939d-92fbcf53809c.png

Vite 5.0 (当前处于 beta 版)

最低 Node.js 版本要求 18+

CommonJS API 已弃用。注意:并未对其进行删除,如果你仍在使用 Vite 中的通用 API,也不会有任何问题。但会收到警告,督促你转向 ESM API。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18275

    浏览量

    222158
  • CCS
    CCS
    +关注

    关注

    8

    文章

    169

    浏览量

    39361
  • SSR
    SSR
    +关注

    关注

    0

    文章

    67

    浏览量

    17479
  • ESM
    ESM
    +关注

    关注

    0

    文章

    7

    浏览量

    9016
  • rust语言
    +关注

    关注

    0

    文章

    58

    浏览量

    2958

原文标题:ViteConf 2023:Vite 即将 Rust 化

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于虚拟仪器测试环境VITE的分析

    VITE标准体系结构分析VITE实现体系结构VITE核心信息模型结构
    发表于 05-12 06:31

    怎样去使用Rust进行嵌入式编程呢

    使用Rust进行嵌入式编程Use Rust for embedded development篇首语:Rust的高性能、可靠性和生产力使其适合于嵌入式系统。在过去的几年里,Rust在程序
    发表于 12-22 07:20

    RUST在嵌入式开发中的应用是什么

    的文档、有用的错误消息、友好编译器、一流的工具,只是Rust的几个好处。它带有一个集成的包管理器和构建工具,支持自动完成和类型检查的智能多编辑器,一个自动格式程序,等等。为什么在嵌入式开发中使用Rust
    发表于 12-24 08:34

    Rust代码中加载静态库时,出现错误 ` rust-lld: error: undefined symbol: malloc `怎么解决?

    “ [i]malloc ”、“ [i]exit ”。我验证了使用 ` [i]nm ` 命令。 问题是我打算使用 ffi 在 rust 中使用这个静态库。当我尝试在我的 Rust 代码中加载静态库
    发表于 06-09 08:44

    精彩预告 | OpenHarmony即将亮相MTSC 2023

    MTSC 2023 第 12 届中国互联网测试开发大会(深圳站)即将2023 年 11 月 25 日,在深圳登喜路国际大酒店举办,大会将以“1 个主会场+4 个平行分会场”的形式呈现,聚集一众
    发表于 11-22 10:28

    2023年奖杯收到

    今天非常高兴收到了论坛发送的2023年“年度优秀版主”奖杯,今年不知不觉间就将结束,期待即将到来的2024年。加油论坛,加油各位坛友!
    发表于 12-09 22:26

    Chrome团队将测试验证Rust与C++的互操作性

    Chrome 团队也开始尝试 Rust 了。在 Chromium 官网近期发布的文档中,“Rust 与 C++ 的互操作性”作为一项尚待解决的挑战被提出。
    的头像 发表于 08-25 10:35 1763次阅读

    Go Vite通用的去中心化应用平台

    go-vite.zip
    发表于 04-22 10:59 1次下载
    Go <b class='flag-5'>Vite</b>通用的去中心化应用平台

    GCC将加入对Rust的支持

    GCC Rust 的代码仍然需要更仔细的审查。按照计划,它有可能作为 GCC 13 的一部分而亮相,GCC 13 将于 2023 年 4 月左右发布稳定版,其对 Rust 语言的支持有希望达到 beta 级别。
    的头像 发表于 12-13 10:04 795次阅读

    Chromium正式开始支持Rust

    泛地在Chromium中使用Rust还需要时间去评估。https://security.googleblog.com/2023/01
    的头像 发表于 01-14 10:04 660次阅读

    Go/Rust挑战Java/Python地位

    增长持续下去,其可能很快就会直接挑战 Java 和 Python 的地位。Go 是其中第三大最受欢迎的语言,其次是 C++、JavaScript、C#、C、Rust、TypeScript、R、Kotlin 和 Scala。
    的头像 发表于 03-06 10:19 500次阅读

    Rust 1.68.1发布修复了回归问题

    rustup安装了Rust,可以使用以下命令更新到1.68.1版本: rustup update stable 如何在2023年3月加速 Rust 编译器 在“如何加速 Rust 编译
    的头像 发表于 03-27 14:43 285次阅读

    Rust流处理新秀,即将抗衡Flink霸主地位

    之前也有Rust尝试做大数据套件,但是都没有很成功的案例。或许Arroyo将是第一个用Rust编写的分布式流处理引擎成功的案例,这样将再次证明Rust在大数据基建领域的可行性。
    的头像 发表于 04-09 10:21 2375次阅读

    基于Rust语言的高可靠、开源嵌入式Hypervisor

    Rust-Shyper 是北京航空航天大学计算机学院王雷教授团队设计开发的虚拟机监控器,该系统基于 Rust 语言,实现了一个高可靠、嵌入式 Hypervisor。2023 年 2 月 15 日
    的头像 发表于 05-24 16:31 1030次阅读
    基于<b class='flag-5'>Rust</b>语言的高可靠、开源嵌入式Hypervisor

    Vite 5正式发布,性能大幅提升

    公告指出,Vite 5 的重点是清理 API(删除已弃用的功能),并精简了几个功能以解决长期存在的问题。例如,将 define 转换为使用正确的 AST 替换,而不是使用 regexes。项目团队表示,他们将继续推进实现面向未来的 Vite
    的头像 发表于 11-20 16:20 520次阅读