【问题标题】:Node modules issue: Only one default export allowed per module节点模块问题:每个模块只允许一个默认导出
【发布时间】:2017-01-02 19:16:15
【问题描述】:

这是我们在为 node_modules 加载新版本集的服务器上执行 npm install 时遇到的问题。

我们有一个看起来像这样的模块

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)

【问题讨论】:

  • 你不能有两个export default,这没有意义。其中一个必须是默认的,可能是最新的,因为它是连接到商店的那个。

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


【解决方案1】:

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

DemoComponent.js

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

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

所以导入语句应该是这样的:

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

当您使用 export default 时,您可以根据需要命名变量,但使用 命名导出 您必须使用与您导出的变量名称相同的变量名。

More about export syntax

顺便说一句,您的示例中有错字。是extends,不是extend

【讨论】:

  • 谢谢,德米特里·内夫佐罗夫。我在这里读到了2ality.com/2015/12/babel-commonjs.html
  • 我不明白,为什么重新安装npm_monules后会出现错误?你真的要export default connect吗?为什么不DemoComponent
  • 因为connect 是一个react-redux HOC component,它将您的DemoComponent 连接到redux 状态。您希望将其导出为连接组件,否则您的 DemoComponent 将无法访问该状态
猜你喜欢
  • 2017-05-11
  • 1970-01-01
  • 2017-01-14
  • 2021-04-24
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 2020-10-18
  • 2014-11-04
相关资源
最近更新 更多