首页 > web前端 > js教程 > Evan You 创建 VoidZero 是做什么的?JS 工具链存在哪些问题?

Evan You 创建 VoidZero 是做什么的?JS 工具链存在哪些问题?

Mary-Kate Olsen
发布: 2024-12-26 01:49:13
原创
172 人浏览过

大家好,我是王福鹏。

我是一名高级全栈工程师,也是 17.5k 开源项目 PMP 的作者。现在我正在开发一个Notion风格的知识库
HuashuiAI 包括 AI 写作和协作,使用 React Nextjs 和 Supabase。

尤文 (Evan You) 和 VoidZero

两个月前,Vue 和 Vite 作者 Evan You 宣布成立 VoiceZero 公司,并获得数百万美元投资。

VoidZero将基于Vite开发Rolldown和Oxc两大工具,统一前端JS工具链。解决碎片、不兼容、效率低等问题。

VoidZero核心工具采用Rust语言开发,运行效率高、速度快。

What is Evan You doing by creating VoidZero, and what are the issues with JS toolchains?

JS工具链存在哪些问题

JS工具链主要包括语义分析、Transformer、linter、Transformer、minifier、bounder等流程

我们目前如何使用这些类型的工具?目前有哪些工具可用?他们之间是什么关系?它们真的效率低下且碎片化吗?下面我们就一一介绍一下。

What is Evan You doing by creating VoidZero, and what are the issues with JS toolchains?

注意他们的关系有些混乱,有的可以编译打包,有很多功能重叠,所以没必要强行分类比较。

JS运行时

所谓运行时,是指一种语言的运行时环境。如果没有运行时,那么语言只是一个无法解析和运行的字符串或字符串文件。

  • Nodejs 是最常见的 JS 运行时,稳定、成熟,并且拥有非常丰富的生态系统。
  • Deno 是近几年开发的 JS 运行时,专注于 TS 支持和网络安全。前两年获得了 2000 万美元的投资,最近发布了 Deno 2.0,目前正在快速发展
  • Bun JS运行时,注重性能和一体化
// Nodejs Deno 或 Bun,都是写 JS 代码
const server = Bun.serve({
  port: 3000,
  fetch(request) {
    return new Response("Welcome to Bun!");
  },
});

console.log(`Listening on localhost:${server.port}`);
登录后复制

注意:JS运行时并不是JS工具链的一部分,它只是最基本的能力,但是了解这些工具和术语可以帮助将它们与JS工具链区分开来。你可能没有用过它,但你需要知道它的存在以及它的作用。

解析器/编译器

Web前端开发需要考虑与各种浏览器的兼容性,因为现代浏览器还无法直接运行 TS JSX 和最新的 ES 代码。

所以,我们需要将开发环境中的TS JSX ES等代码转换为浏览器可以执行的JS代码,通常是ES5。

What is Evan You doing by creating VoidZero, and what are the issues with JS toolchains?

Babel 是最早做这项工作的人之一,使用 JS 开发,拥有丰富的生态系统和插件,并且早已集成到 webpack rollup 等打包工具中。

但是Babel是用JS开发的,所以运行效率比较低。而且Babel在编译TS JSX时需要手动配置,相当麻烦。

SWC是一个用Rust语言开发的JS编译器,比Babel快20-70倍(在不同CPU上),并且原生支持TS和JSX语法,旨在取代Babel。 Vite内部使用SWC。

Rspack 使用 Rust 语言开发,但它不仅仅是一个 JS 编译器。是一款高效的综合打包工具。

与Rspack一样,ESBullid也是使用Go语言开发的,是一个综合性的打包工具,包含JS编译器,效率很高。

What is Evan You doing by creating VoidZero, and what are the issues with JS toolchains?

短绒检查和格式化程序

本节常用的是ESLint和Prettier,但它们的使用也存在一些混乱

  • ESLint的配置标准有很多(比如Recommended、Airbnb、Google、StandardJS等),每个人使用的方式可能不一样。不同的项目也可能有不同的配置
  • ESLint 和 Prettier 存在一些重复的功能,导致使用时难以选择,并且可能存在重复的配置

What is Evan You doing by creating VoidZero, and what are the issues with JS toolchains?

缩小器

UglifyJS是最早用来压缩JS代码的之一,现在它的下载量也非常大。

Terser基于UglifyJS源码开发,支持ES6新语法并优化Tree Shaking。

不过,SWC、esbulid等新工具现在也支持JS代码压缩,而且执行效率更高。毕竟 Rust 或者 Go 本身的执行效率就比 JS 高很多。

邦德勒

打包器是我们最常接触的,比如Webpack Vite、Parcel。后者可能不常用,但也是一个成熟的工具。

Vite使用SWC作为解释器,效率很高。开发环境使用esbulid打包,生产环境使用rollup打包。

同时,esbulid(Go语言开发,前面介绍过)和rollup也可以单独使用作为打包工具,很多第三方JS插件都是使用rollup进行打包的。

Turbopack 是 Vercel 使用 Rust 为 Next.js 项目开发的 JS 打包工具,也可以独立使用。

Rspack 是一个使用 Rust 开发的 JS 打包工具(附带 JS 编译器),可以替代 webpack,而且速度非常快。

What is Evan You doing by creating VoidZero, and what are the issues with JS toolchains?

SWC也在开发自己的打包工具swcpack——这么多,你觉得乱吗?是碎片化的吗?

What is Evan You doing by creating VoidZero, and what are the issues with JS toolchains?

为什么使用 Rust

你可能会好奇,为什么这么多工具需要用 Rust 语言开发?主要有两点

  • Rust 是一种编译型语言,可以编译为本机代码并直接运行,性能与 C 相当
  • Rust 内存管理更安全,而 C 内存管理更容易出现 bug

结局

回顾 JS 工具链的三个问题

  • 碎片化:这个太明显了,各个领域都有很多重复的工具,尤其是巨石
  • 不兼容性:旧工具与新语法(尤其是 TS JSX)兼容,并且需要过多配置
  • 效率低:这个也是很明显的。在工具领域,JS 做得不如 Rust,被淘汰只是时间问题(别慌:这只是工具领域,应用领域还是 JS 和 TS)

所以,Vue 作者 Evan You 的眼睛很锐利,看得很准,能直接指出问题。而且他在这部分有很强的优势和抓地力,那就是Vite。 Vite现在拥有大量用户,可以作为一个很好的切入点。

当Vue等Web框架和Vite等单一工具遇到开发瓶颈时,Evan可以跳出这个圈子,发现更高层次的问题,并能够落地执行。这是值得我们学习的。

最后,这么多的投资,VoidZero需要一个投资回报。未来将如何商业化? Vite无法直接充值,那我们怎么赚钱呢?

关注我,我会在下一节详细分析。这将比技术和代码更有价值。

顺便说一句,我正在寻找一份国际工作机会,如果你有机会,欢迎通过我的 Github 个人资料联系我。

以上是Evan You 创建 VoidZero 是做什么的?JS 工具链存在哪些问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板