模組
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
結尾的任何路徑。