重大變更:Babel 6 匯出預設行為
隨著 Babel 6 的發布,預設導出的處理方式發生了重大變化。雖然 Babel 之前新增了 module.exports = Exports["default"] 行,但此功能已被刪除。
此修改需要更改模組導入語法。以前,使用舊語法的程式碼:
var foo = require('./foo'); // use foo
現在必須採用以下語法:
var foo = require('./foo').default; // use foo
雖然此調整可能看起來很小,但它可能會對程式碼嚴重依賴先前匯出機制的專案構成挑戰。
解決方法
如果需要遺留導出行為,建議直接使用 CommonJS。或者,可以使用自訂插件來提供所需的相容性。該插件的功能可能會反映 Babel 6 中刪除的行為,將 module.exports = Exports["default"] 行加入轉譯輸出。
命名導出的影響
值得注意的是,刪除自動 module.exports 分配改進了 ES6 語義並防止潛在的混淆。命名導出現在將按預期運行,不會意外分配給預設導出。
範例
以下程式碼示範了 Babel 5 和 Babel 6 匯出行為之間的差異:
// Input
const foo = {}
export default foo
Babel 5 輸出
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];
Babel 6 輸出
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
可以觀察到,輸出中的唯一差異是 Babel 6 中缺少 module.exports = Exports["default"]。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3