Como usar corretamente o ES6 "export default" com o CommonJS "require"?

Eu tenho trabalhadoTutorial do Webpack. Em uma das seções, ele fornece o exemplo de código que contém uma linha de essência para esta pergunta:

export default class Button { /* class code here */ }

Na próxima seção do referido tutorial, intitulada "Divisão de código", a classe definida acima é carregada sob demanda, assim:

require.ensure([], () => {
    const Button = require("./Components/Button");
    const button = new Button("google.com");
    // ...
});

Infelizmente, esse código gera uma exceção:

Uncaught TypeError: Button is not a function

Agora eu sei que odireito Uma maneira de incluir o módulo ES6 seria simplesmenteimport Button from './Components/Button'; na parte superior do arquivo, mas usar uma construção como essa em qualquer outro lugar do arquivo faz de babel um panda triste:

SyntaxError: index.js: 'import' and 'export' may only appear at the top level

Após algumas brincadeiras com as anteriores (require.ensure()) exemplo acima, percebi que o ES6export default sintaxe exporta um objeto que possui a propriedade denominadadefault, que contém meu código (oButton função).

Corrigi o exemplo de código quebrado anexando.default depois de exigir a chamada, assim:

const Button = require("./Components/Button").default;

... mas acho que parece um pouco desajeitado e propenso a erros (eu precisaria saber qual módulo usa a sintaxe ES6 e qual usa bons e velhosmodule.exports)

O que me leva à minha pergunta:qual é a maneira correta de importar o código ES6 do código que usa a sintaxe CommonJS?

questionAnswers(2)

yourAnswerToTheQuestion