Как правильно использовать ES6 «экспорт по умолчанию» с CommonJS «требовать»?

Я работал черезWebpack учебник, В одном из разделов приведен пример кода, который содержит одну строчку сути этого вопроса:

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

В следующем разделе упомянутого учебника под названием «Разделение кода» определенный выше класс загружается по требованию, например так:

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

К сожалению, этот код вызывает исключение:

Uncaught TypeError: Button is not a function

Теперь я знаю, чтоправо способ включить модуль ES6 будет простоimport Button from './Components/Button'; в верхней части файла, но использование такой конструкции где-либо еще в файле делает babel грустной пандой:

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

После некоторого возни с предыдущим (require.ensure()) Пример выше, я понял, что ES6export default Синтаксис экспортирует объект с именемdefault, который содержит мой код (Button функция).

Я исправил пример неработающего кода, добавив.default после звонка, вот так:

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

... но я думаю, что это выглядит немного неуклюже и подвержено ошибкам (я должен был бы знать, какой модуль использует синтаксис ES6, а какой использует старый добрыйmodule.exports).

Что подводит меня к моему вопросу:Как правильно импортировать код ES6 из кода, который использует синтаксис CommonJS?

Ответы на вопрос(2)

Ваш ответ на вопрос