节点模块问题:每个模块只允许一个默认导出

时间:2016-08-26 07:34:34

标签: reactjs ecmascript-6 babeljs npm-install node-modules

这是在服务器上执行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)       at 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 个答案:

答案 0 :(得分:13)

您不能在文件中使用多个export default。这没有意义。如果您需要导出多个内容,则需要使用命名导出

<强> 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时,您可以根据需要为变量命名,但使用命名导出,您必须使用与导出的变量名称相同的变量名称。

More about export syntax

顺便说一句,你的例子中有一个拼写错误。它是extends,而不是extend