307 - 《SWC》

发布于 2023年6月1日

最近一直在和 SWC 相爱相杀。

1、SWC 是啥?SWC 是 Babel 的替代品,单线程比 Babel 快 20 倍,4 核 CPU 上比 Babel 快 70 倍。作者是 kdy1,97 年的韩国程序员,真名강동윤,他在 2017 年开始写 SWC,那一年他 20 岁,上大二。

2、SWC 怎么用?

分三个方向,JS、Rust 和 CLI。SWC 提供多个 JS 方式的库,比如 @swc/core、@swc/wasm-web、swcMinify、swc-loader、@swc/jest 等,可以和测试、构建、webpack 等工具集成使用,现在的应用大部分都是基于此类;同时如果你要开发 Rust 工具,还可以基于 SWC 底层 crate(相当于 npm 包)实现各种功能,效率也更高;CLI 就是 @swc/cli 这个包,可以做文件的 Transpile 操作。

@swc/core。

import swc from '@swc/core';
// transform
const result = await swc.transform(code, opts);
// parse to ast
const ast = await swc.parse(code, opts);

@swc/wasm-web。

import initSwc, { transformSync } from '@swc/wasm-web';
await initSwc();
const result = transformSync(code, opts);

@swc/jest。

module.exports = {
  transform: {
    "^.+\\.(t|j)sx?$": "@swc/jest",
  },
};

3、如何基于 SWC 开发插件?

SWC 插件我记得之前是可以用 JavaScript 开发的,后来由于性能上的考虑,只有基于 Rust 开发的了。然后产出 crate 和 WASM 分别给 Rust 和 JavaScript 生态使用。官网有 swc_cli 和 swc_plugin 两个包来辅助开发。

$ cargo install swc_cli
$ swc plugin new --target-type wasm32-wasi first-plugin
$ rustup target add wasm32-wasi

插件长这样。

pub struct TransformVisitor {}
impl VisitMut for TransformVisitor {
  // https:/

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。