跳至内容
博客
介绍 SWC 1.0

介绍 SWC 1.0

2019 年 2 月 8 日作者:DongYoon Kang

什么是 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/coreyarn add --dev @swc/core

Swc 默认启用所有传递。因此,如果您只使用标准 ecmascript,您只需删除 .babelrc 并将 babel.transform() 更改为 swc.transform()

有关更多详细信息,请参阅 用法文档迁移文档。另请注意,swc 尚未支持自定义插件。

@babel/cli

运行 npm i --save-dev @swc/core @swc/cliyarn add --dev @swc/core @swc/cli 进行安装。 @swc/cli 的 CLI API 几乎等同于 @babel/cli 的 CLI API。因此,如果您使用的是标准 ecmascript,您只需将 npx babel 替换为 npx swc。如果出现错误,请 报告错误 (在新标签页中打开)

有关更多详细信息,请参阅 用法文档迁移文档。另请注意,swc 尚未支持自定义插件。