Rust Is The Future of JavaScript Infrastructure 这篇文章讲述了 Rust 正在 JS 基建圈流行的事实:Webpack、Babel、Terser、Prettier、ESLint 这些前些年才流行起来的工具都已有了 Rust 替代方案,且性能有着 10~100 倍的提升。
前端基建的迭代浪潮从未停歇,当上面这些工具给 Gulp、js-beautify、tslint 等工具盖上棺材盖时,基于 Rust 的新一代构建工具已经悄悄将棺材盖悬挂在 webpack、babel、prettier、terser、eslint 它们头上,不知道哪天就会盖上。
原文已经有了不错的 中文翻译,值得一提的是,原文一些英文名词对应着特定中文解释,记录如下:
low-level programming:低级编程 底层编程。
ergonomics:人体工程学 人机工程学。
opinionated:自以为是,固执的 开箱即用的。
critical adoption:批判性采用 技术选型临界点。
精读
本文不会介绍 Rust 如何使用,而会重点介绍原文提到的 Rust 工具链的一些基本用法,如果你感兴趣,可以立刻替换现有的工具库!
swc
swc 是基于 Rust 开发的一系列编译、打包、压缩等工具,并且被广泛应用于更多更上层的 JS 基建,大大推动了 Rust 在 JS 基建的影响力,所以要第一个介绍。
swc 提供了一系列原子能力,涵盖构建与运行时:
@swc/cli
@swc/cli
可以同时构建 js 与 ts 文件:
const a = 1
npm i -D @swc/cli
npx swc ./main.ts
# output:
# Successfully compiled 1 file with swc.
# var a = 1;
具体功能与 babel 类似,都可以让浏览器支持先进语法或者 ts,只是 @swc/cli
比 babel 快了至少 20 倍。可以通过 .swcrc
文件做 自定义配置。
@swc/core
你可以利用 @swc/core
制作更上层的构建工具,所以它是 @swc/cli
的开发者调用版本。基本 API 来自官网开发者文档:
const swc = require("@swc/core");
swc
.transform("source code", {
// Some options cannot be specified in .swcrc
filename: "input.js",
sourceMaps: true,
// Input files are treated as module by default.
isModule: false,
// All options below can be configured via .swcrc
jsc: {
parser: {
syntax: "ecmascript",
},
transform: {},
},
})
.then((output) => {