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 (как вы это делаете). Это также было непоследовательно; если модуль содержал как именованный экспорт, так и экспорт по умолчанию, он не мог быть 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();
.babelrc
? Вы где-то указываете параметры Babel? Я спрашиваю, потому что Babel 6 ничего не переносит по умолчанию, и вы не указываетеes2015
предустановку в опубликованном вами коде.