介绍 SWC 1.0
什么是 SWC?
swc (在新标签页中打开) (快速网页编译器) 是一款超快的 JavaScript 编译器。
SWC 可以做什么?
它可以将 TypeScript / jsx / ECMAScript 2019 转换为浏览器兼容的 JavaScript。
// input.js
class Foo {
set foo(v) {}
}
class Bar extends Foo {
get bar1() {}
async bar2() {}
}
SWC 有多快?
它比 babel 快 16 倍到 20 倍,即使在单核同步基准测试中也是如此。请注意,实际的性能差距更大,因为 swc 在工作线程上运行,而 babel 在事件循环线程上运行。
安装
您可以使用以下命令安装 swc
:
# if you use npm
npm i -D @swc/core
# if you use yarn
yarn add -D @swc/core
有关更多详细信息,请参阅 入门。
SWC 1.0 中包含什么?
Swc 实现了几乎所有 babel 插件。截至 1.0.0 版本,swc 可以理解各种 ecmascript 方言,并将它们编译成 es5。
ECMAScript 2019 支持
.swcrc
:
{
"jsc": {
"parser": {
"syntax": "ecmascript"
}
}
}
React (带 jsx)
.swcrc
:
{
"jsc": {
"parser": {
"syntax": "ecmascript",
"jsx": true
}
}
}
TypeScript 支持
Swc 还可以将 typescript / tsx 编译成 ecmascript。请注意,它在撰写本文时不会进行类型检查。类型检查在 #126 (在新标签页中打开) 中进行跟踪。
.swcrc
:
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": false
}
}
}
有关更多详细信息,请参阅 文档。
各种转换
-
es3
- member-expression-literals
- property-literals
- reserved-words
-
es2015
- arrow-functions
- block-scoped-functions
- block-scoping
- classes
- computed-properties
- destructuring
- duplicate-keys
- for-of
- function-name
- instanceof
- literals
- new-target
- parameters
- shorthand-properties
- spread
- 粘性正则表达式 (
y
标志) - template-literals
- typeof-symbol
-
es2016
- exponentiation-operator
-
es2017
- async-to-generator
-
es2018
- object-rest-spread
-
react
- jsx
从 Babel 迁移
@babel/core
运行 npm i --save-dev @swc/core
或 yarn add --dev @swc/core
。
Swc 默认启用所有传递。因此,如果您只使用标准 ecmascript,您只需删除 .babelrc
并将 babel.transform()
更改为 swc.transform()
。
有关更多详细信息,请参阅 用法文档 和 迁移文档。另请注意,swc 尚未支持自定义插件。
@babel/cli
运行 npm i --save-dev @swc/core @swc/cli
或 yarn add --dev @swc/core @swc/cli
进行安装。 @swc/cli
的 CLI API 几乎等同于 @babel/cli
的 CLI API。因此,如果您使用的是标准 ecmascript,您只需将 npx babel
替换为 npx swc
。如果出现错误,请 报告错误 (在新标签页中打开)。