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 require
este 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 eles2015
ajuste preestablecido en el código que ha publicado.