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предустановку в опубликованном вами коде.