Раніше вавилон додав би рядок module.exports = exports["default"]
. Це більше не робить цього. Що це означає, перш ніж я міг зробити:
var foo = require('./foo');
// use foo
Тепер я повинен зробити це:
var foo = require('./foo').default;
// use foo
Не велика справа (і я здогадуюсь, це те, що повинно було бути весь час). Проблема полягає в тому, що у мене є багато коду, який залежав від того, як працювали речі (я можу конвертувати більшу частину його в імпорт ES6, але не весь). Хто-небудь може дати мені поради щодо того, як змусити старий спосіб працювати без необхідності пройти мій проект і виправити це (або навіть якусь інструкцію, як написати кодемод, щоб зробити це, було б досить гладко).
Дякую!
Приклад:
Вхід:
const foo = {}
export default foo
Вихід за допомогою Вавілони 5
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];
Вихід із Babel 6 (та плагін es2015):
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
Зауважте, що єдиною різницею у виході є module.exports = exports["default"]
.
Редагувати
Можливо, вас зацікавить цей блог-пост, який я написав після вирішення моєї конкретної проблеми: Нерозуміння модулів ES6, Оновлення Вавілону, Сльози та рішення
if (false) { require('./foo') }
з webpack пропускається фактично, включаючи foo.js
в отриманий пакет.
false
перемиканням там? Якщо це умова, наявна у вашому конфігурації веб-пакету, може бути інший варіант.
export default {foo, bar}
з module.exports = {foo, bar}
. Мені дуже сподобався невірний метод, який зараз не підтримується.
require
якщо ви працюєте в кодовій базі, яка використовує Babel? Швидше за все, є й інші підходи, які дозволять вам уникнути цього в будь-якому випадку.