Ответ 1
TL; DR
Вы должны использовать
require('./app').default();
Объяснение
У Babel 5 раньше был пакет совместимости для export default
: если модуль содержал только один экспорт, и он был экспортирован по умолчанию, он был назначен module.exports
. Так, например, ваш модуль app.js
export default function () {}
будет передано на этот
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
Это было сделано исключительно для совместимости с require
-ing Babel-transpiled modules (как вы это делаете). Это также было непоследовательно; если модуль содержит оба именованных и по умолчанию экспорта, он не может быть require
-d.
В действительности, согласно спецификации модуля ES6, экспорт по умолчанию не отличается от именованного экспорта с именем default
. Это просто синтаксический сахар, который можно статически решать во время компиляции, поэтому это
import something from './app';
совпадает с этим
import { default as something } from './app';
Таким образом, похоже, что Babel 6 решил отказаться от взлома интероперабельности при пересылке модулей. Теперь ваш модуль app.js транслируется как
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
Как вы видите, больше не присваивается module.exports
. Чтобы require
этот модуль, вам нужно сделать
require('./app').default();