Как правильно использовать ES6 " экспорт по умолчанию "с CommonJS"require"?
я работал через 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()
) пример выше, я понял, что ES6 export default
синтаксис экспортирует объект со свойством default
, который содержит мой код (
2 ответов
использовать export default
с Babel, вы можете сделать 1 из следующего:
require("myStuff").default
npm install babel-plugin-add-module-exports --save-dev
или 3:
//myStuff.js
var thingToExport = {};
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = thingToExport;
Если кто-то использует gulp + browserify + babelify для связывания js, используя в клиентском конце.
попробуйте следующий код [gulpfile.js]:
browserify({
entries: "./ui/qiyun-ui/javascripts/qiyun-ui.src.js",
standalone: "qyUI" // To UMD
})
.transform(babelify, {
presets: ["env"],
plugins: ["add-module-exports"] // export default {} => module.exports = exports['default'];
})
.bundle()
Не забудьте установить этот пакет: https://www.npmjs.com/package/babel-plugin-add-module-exports