Skip to content
文档
配置
模块
💡

SWC 为配置文件提供了官方的 JSON Schema。

.swcrc
{
  "$schema": "https://swc.rs/schema.json",
}

模块

SWC 可以使用 ES 模块将您的代码转译为 CommonJS 或 UMD/AMD。默认情况下,模块语句将保持不变。

CommonJS

要生成 CommonJS 模块,请在 .swcrc 中更改 type

.swcrc
{
  "$schema": "https://swc.rs/schema.json",
  "module": {
    "type": "commonjs",
 
    // 这些是默认值。
    "strict": false,
    "strictMode": true,
    "lazy": false,
    "noInterop": false
  }
}

ES6

要生成 ES6 模块,请在 .swcrc 中更改 type

.swcrc
{
  "module": {
    "type": "es6",
 
    // 这些是默认值。
    "strict": false,
    "strictMode": true,
    "lazy": false,
    "noInterop": false
  }
}

AMD

要生成 AMD 模块,请在 .swcrc 中更改 type

.swcrc
{
  "module": {
    "type": "amd",
    // 可选。如果指定,swc 会生成命名的 AMD 模块。
    "moduleId": "foo",
 
    // 这些是默认值。
    "strict": false,
    "strictMode": true,
    "lazy": false,
    "noInterop": false
  }
}

UMD

要生成 UMD 模块,请在 .swcrc 中更改 type

.swcrc
{
  "module": {
    "type": "umd",
    "globals": {},
 
    // 这些是默认值。
    "strict": false,
    "strictMode": true,
    "lazy": false,
    "noInterop": false
  }
}

共享选项

这些选项由 .swcrc 中的 commonjs / es6 / umd / amd 共享:

.swcrc
{
  "module": {
    // 你可以指定 "commonjs", "es6", "amd", "umd"
    "type": "commonjs",
    "strict": false,
    "strictMode": true,
    "lazy": false,
    "noInterop": false,
    "ignoreDynamic": false,
    "preserveImportMeta": false
  }
}

strict

默认为 false。默认情况下,当使用 SWC 导出时,会导出一个不可枚举的 __esModule 属性。在某些情况下,此属性用于确定导入是默认导出还是包含默认导出。

要防止导出 __esModule 属性,可以将 strict 选项设置为 true

strictMode

默认为 true。如果为 true,swc 会发出 'use strict' 指令。

lazy

默认为 false。此选项将 Babel 编译的 import 语句更改为在首次使用其导入绑定时进行延迟评估。这可以改善模块的初始加载时间,因为提前评估依赖项有时是完全不必要的。这在实现库模块时尤其如此。

lazy 的值有几种可能的影响:

  • false - 不对任何导入的模块进行延迟初始化。
  • true - 不对本地的 ./foo 导入进行延迟初始化,但会延迟初始化 foo 依赖项。本地路径更有可能存在循环依赖关系,如果延迟加载可能会中断,因此默认情况下它们不会延迟加载,而独立模块之间的依赖关系很少是循环的。
  • Array<string> - 对所有与给定字符串匹配的导入进行延迟初始化。

以下两种情况永远不会延迟导入:

  • import "foo"; 副作用导入自动为非延迟,因为它们的存在意味着没有绑定可以稍后触发初始化。
  • export from "foo" 重新导出所有名称需要提前执行,否则无法知道需要导出哪些名称。

noInterop

默认为 false。默认情况下,当使用 SWC 导出时,会导出一个不可枚举的 __esModule 属性。 然后使用此属性来确定导入是默认导出还是包含默认导出。

在不需要自动解包默认导出的情况下,可以将 noInterop 选项设置为 true,以避免使用 interopRequireDefault 辅助函数(如上所示的内联形式)。

ignoreDynamic

如果设置为 true,将保留动态导入。

preserveImportMeta

如果设置为 true,将保留 import.meta

importInterop

可能的值:

  • swc(别名:babel
  • node
  • none

如果 noInterop 为 true,则默认为 none,否则默认为 swc

resolveFully

当设置为 true 时,完全解析模块 import 文件路径,包括以 index.js 结尾的路径。