TL; DR
Tienes que usar
require('./app').default();
Explicación
Babel 5 solía tener un truco de compatibilidad para export default: si un módulo contenía solo una exportación, y era una exportación predeterminada, se le asignaba module.exports. Entonces, por ejemplo, su módulo app.js
export default function () {}
se trasladaría a esto
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
Esto fue hecho exclusivamente para la compatibilidad con require-ing módulos transpiled-Babel (como lo está haciendo). También fue inconsistente; si un módulo contiene exportaciones con nombre y predeterminadas, no puede ser require-d.
En realidad, de acuerdo con la especificación del módulo ES6, una exportación predeterminada no es diferente de una exportación con nombre con el nombre default. Es solo azúcar sintáctico que se puede resolver estáticamente en tiempo de compilación, por lo que este
import something from './app';
es lo mismo que este
import { default as something } from './app';
Dicho esto, parece que Babel 6 decidió eliminar el truco de interoperabilidad al transpilar módulos. Ahora, su módulo app.js se transpila como
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
Como ves, no hay más asignaciones a module.exports. Para requireeste módulo, debe hacer
require('./app').default();
.babelrc? ¿Estás especificando opciones de Babel en alguna parte? Lo pregunto porque Babel 6 no transpila nada de forma predeterminada y no está especificando eles2015ajuste preestablecido en el código que ha publicado.