模块
SWC 可以使用 ES 模块将您的代码转换为 CommonJS 或 UMD/AMD。默认情况下,模块语句将保持不变。
CommonJS
要发出 CommonJS 模块,请更改 type
在 .swcrc
{
"$schema": "http://json.schemastore.org/swcrc",
"module": {
"type": "commonjs",
// These are defaults.
"strict": false,
"strictMode": true,
"lazy": false,
"noInterop": false
}
}
ES6
要发出 ES6 模块,请更改 type
在 .swcrc
{
"module": {
"type": "es6",
// These are defaults.
"strict": false,
"strictMode": true,
"lazy": false,
"noInterop": false
}
}
AMD
要发出 AMD 模块,请更改 type
在 .swcrc
{
"module": {
"type": "amd",
// Optional. If specified, swc emits named AMD module.
"moduleId": "foo",
// These are defaults.
"strict": false,
"strictMode": true,
"lazy": false,
"noInterop": false
}
}
UMD
要发出 UMD 模块,请更改 type
在 .swcrc
{
"module": {
"type": "umd",
"globals": {},
// These are defaults.
"strict": false,
"strictMode": true,
"lazy": false,
"noInterop": false
}
}
共享选项
这些选项由 commonjs
/ es6
/ umd
/ amd
在 .swcrc
中共享
{
"module": {
// You can specify "commonjs", "es6", "amd", "umd"
"type": "commonjs",
"strict": false,
"strictMode": true,
"lazy": false,
"noInterop": false,
"ignoreDynamic": 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
,动态导入将被保留。
importInterop
可能的值
swc
(别名:babel
)node
none
如果 noInterop
为 true,则默认为 none
,否则为 swc
。
resolveFully
当设置为 true
时,将完全解析模块 import
文件路径,包括以 index.js
结尾的路径。