Não é possível exigir o valor de exportação padrão () no Babel 6.x

No Babel 5.x, posso escrever o seguinte código:

app.js

export default function (){} 

index.js

 require('babel/register'); require('./app')(); 

Então, posso executar o node index.js sem erros. No entanto, usando o Babel 6.x, executando o seguinte código

index.es6.js

 require('babel-core/register'); require('./app')(); 

resulta em um erro

requer (…) não é uma function

Eu quero saber porque?

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, ela foi designada para module.exports . Então, por exemplo, seu módulo app.js

 export default function () {} 

seria transpiled para este

 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = function () {}; module.exports = exports["default"]; 

Isso foi feito apenas para compatibilidade com a require de módulos Babel-transpiled (como você está fazendo). Também foi inconsistente; se um módulo continha ambas as exportações nomeada e padrão, não poderia ser require -d.

Na realidade, de acordo com a especificação 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 compilation, então

 import something from './app'; 

é o mesmo que isso

 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(); 

Apenas para acompanhar a resposta correta acima.

Se você quer usar o comportamento de exportação padrão do babel@5 , você pode tentar o plugin babel-plugin-add-module-exports .

Está funcionando muito bem para mim.