Node выпуск модулей: разрешен только один экспорт по умолчанию для каждого модуля

Это проблема, с которой мы столкнулись при выполнении npm install на сервере, который загрузил новый набор версий для node_modules.

У нас есть модуль, который выглядит как

export default class DemoComponent extend React.Component {
  render() {
    return(
      <h1>Hello</h1>
    );
  }
}

export default connect(
  mapStateToProps,
  { ... }
)(DemoComponent);

Он работал отлично, прежде чем мы сделали npm install, который загрузил новую версию зависимостей разработки.

ОШИБКА:

Разрешен только один экспорт по умолчанию для каждого модуля.     в File.buildCodeFrameError(/home/workspace/ node_modules/babel-core/lib/transformation/file/index.js:431:15)     в NodePath.buildCodeFrameError(/home/workspace/node_modules/babel-traverse/lib/path/index.js:140:26)     в PluginPass.exit(/home/workspace/node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js:253:29)     на newFn (/home/workspace/node_modules/babel-traverse/lib/visitors.js:276:21)     в NodePath._call (/home/workspace/node_modules/babel-traverse/lib/path/context.js:76:18)     в NodePath.call(/home/workspace/node_modules/babel-traverse/lib/path/context.js:48:17)     в NodePath.visit(/home/workspace/node_modules/babel-traverse/lib/path/context.js:117:8)     в TraversalContext.visitQueue(/home/workspace/node_modules/babel-traverse/lib/context.js:150:16)     в TraversalContext.visitSingle(/home/workspace/node_modules/babel-traverse/lib/context.js:108:19)     в TraversalContext.visit(/home/workspace/node_modules/babel-traverse/lib/context.js:192:19)     в Function.traverse.node(/home/workspace/node_modules/babel-traverse/lib/index.js:161:17)

Ответ 1

Вы не можете использовать более одного export default в файле. Это не имеет смысла. Если вам нужно экспортировать несколько вещей, вам нужно использовать с именем export

DemoComponent.js

export class DemoComponent extends React.Component {
  render() {
    return(
      <h1>Hello</h1>
    );
  }
}

export default connect(
  mapStateToProps,
  { ... }
)(DemoComponent);

Итак, инструкция import будет выглядеть так:

import ConnectedComponent, {DemoComponent} from './DemoComponent';

Когда вы используете export default, вы можете назвать свою переменную так, как хотите, но с с именем export вы должны использовать то же имя переменной, что и экспортируемое.

Подробнее о синтаксисе экспорта

Кстати, у вас есть опечатка в вашем примере. Это extends, а не extend