跳至主要內容

注意事項

Polyfills

為了讓某些功能運作,它們需要某些 polyfills。你可以使用完整的 polyfill(例如 core-js/actual 或(如果你想使用 <script> 標籤載入)core-js-bundle)來滿足 Babel 所有功能需求。

你也可以選擇性地包含你需要的部分

功能需求
陣列解構、For OfSymbolprototype[Symbol.iterator]
展開Array.from

如果您正在將產生器或非同步函數編譯到 ES5,並且您使用的是早於 7.18.0@babel/core@babel/plugin-transform-regenerator 版本,您還必須載入 regenerator runtime 套件。使用 @babel/preset-envuseBuiltIns: "usage" 選項或 @babel/plugin-transform-runtime 時,它會自動載入。

內建

Babel 假設內建(例如 ArrayWeakMap 等),如果已進行 polyfill,則會以符合規範的方式進行修改。

類別

由於 ES5 的限制(適用於 transform-classes 外掛程式),內建類別(例如 DateArrayDOM 等)無法正確地進行子類別化。您可以嘗試使用基於 Object.setPrototypeOfReflect.constructbabel-plugin-transform-builtin-extend,但它也有一些限制。

ES5

由於 Babel 假設您的程式碼將在 ES5 環境中執行,因此它使用 ES5 函數。因此,如果您使用的是對 ES5 支援有限或不支援的環境,例如較低版本的 IE,則使用 @babel/polyfill 將會新增對這些方法的支援。

Internet Explorer

類別(10 及以下版本)

如果您繼承自一個類別,則靜態屬性會透過 __proto__ 從該類別繼承,這獲得廣泛支援,但您可能會在較舊的瀏覽器中遇到問題。

注意: __proto__ 在 IE ≤ 10 中不受支援,因此靜態屬性不會被繼承。請參閱 protoToAssign 以取得可能的解決方法。

對於具有 super 的類別,父類別無法正確解析。你可以透過在 transform-classes 外掛程式中啟用 loose 選項來解決此問題。

Getter/setter(8 及以下版本)

在 IE8 中,Object.defineProperty 只能用於 DOM 物件。這很不幸,因為設定 getter 和 setter 需要用到它。因此,如果你計畫支援 IE8 或以下版本,則不建議使用 getter 和 setter。

參考: MDN

模組

預設情況下,在使用 Babel 搭配模組時,會匯出不可列舉的 __esModule 屬性。這是透過使用 Object.defineProperty 來完成的,而 IE8 及以下版本不支援此功能。解決此問題的方法是在對應的模組外掛程式中啟用 loose 選項。