TL; DR
Você tem que usar
require('./app').default();
Explicação
O Babel 5 costumava ter um hack de compatibilidade para export default
: se um módulo continha apenas uma exportação, e era uma exportação padrão, ele era atribuído module.exports
. Então, por exemplo, seu módulo app.js
export default function () {}
seria transpilado para este
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
Isso foi feito puramente para compatibilidade com require
módulos -ing Babel-transpilados (como você está fazendo). Também era inconsistente; se um módulo contivesse exportações nomeadas e padrão, não poderia ser require
-d.
Na realidade, de acordo com as especificações do módulo ES6, uma exportação padrão não é diferente de uma exportação nomeada com o nome default
. É apenas açúcar sintático que pode ser resolvido estaticamente em tempo de compilação, então este
import something from './app';
é o mesmo que este
import { default as something } from './app';
Dito isto, parece que o Babel 6 decidiu abandonar o hack de interoperabilidade ao transpilar módulos. Agora, seu módulo app.js é transpilado como
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
Como você vê, não há mais atribuição para module.exports
. Para require
este módulo, você precisa fazer
require('./app').default();
.babelrc
? Você está especificando opções do Babel em algum lugar? Eu pergunto porque o Babel 6 não transpila nada por padrão e você não está especificando aes2015
predefinição no código que postou.