Раньше Бабель добавлял строчку module.exports = exports["default"]
. Это больше не делает это. Что это значит, прежде чем я смог сделать:
var foo = require('./foo');
// use foo
Теперь я должен сделать это:
var foo = require('./foo').default;
// use foo
Не огромная сделка (и я предполагаю, что так и должно быть). Проблема в том, что у меня много кода, который зависел от того, как все работало раньше (я могу преобразовать большую часть его в импорт ES6, но не все). Может кто-нибудь дать мне советы о том, как заставить старый способ работать без необходимости проходить через мой проект и исправлять это (или даже некоторую инструкцию о том, как написать codemod, чтобы сделать это, было бы довольно гладко).
Спасибо!
Пример:
Входные данные:
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, обновление Babel, слезы и решение
if (false) { require('./foo') }
с webpack пропустил бы фактическое включение foo.js
в получившийся пакет.
false
тумблером? Если это условие доступно в вашей конфигурации веб-пакета, может быть другой вариант.
export default {foo, bar}
с module.exports = {foo, bar}
. Мне очень понравился неправильный метод, который сейчас не поддерживается.
require
если вы работаете в кодовой базе, которая использует Babel? Скорее всего, есть и другие подходы, которые в любом случае позволят вам избежать этого.