节点模块问题:每个模块只允许一个默认导出
Posted
技术标签:
【中文标题】节点模块问题:每个模块只允许一个默认导出【英文标题】: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
,这没有意义。其中一个必须是默认的,可能是最新的,因为它是连接到商店的那个。
【参考方案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
将无法访问该状态以上是关于节点模块问题:每个模块只允许一个默认导出的主要内容,如果未能解决你的问题,请参考以下文章