首页 > 解决方案 > es6如何导入已经在另一个js包中定义的

问题描述

我有一个我使用的包,有点像这样:

import { something } from 'somewhere';

但是我有另一个要导入的包,我需要定义something其中定义的相同名称。

import myConsts from 'SomewhereElse';
const { something, another } = myConsts;

我得到一个 eslint 错误(这是正确的)something already defined

这是一个真实的例子:

import { connect } from 'react-redux';
// following lines from react-native-kontaktio sample code...
import Kontakt from 'react-native-kontaktio';
const { connect, configure, startScanning } = Kontakt;

我试过了

import { connect as kontaktConnect, configure, startScanning } from 'react-native-kontaktio'  

但得到Possible promise rejection ... (reactNativeKontaktio.connect) is not a function

如果我尝试改变

import { connect as reduxConnect } from 'react-redux';

我将不得不按如下方式更改导出。这不会在其他地方破坏我的代码吗?

// export default connect(mapStateToProps, mapDispatchToProps)(AppMain);
export default reduxConnect(mapStateToProps, mapDispatchToProps)(AppMain);

我该如何克服呢?在某些情况下我可以忽略警告吗?Ecma6 中没有多态性,对吧?


这不是关于两个具有相同名称的类的问题,而是关于具有同名方法或常量的两个类的问题。那里的答案似乎适用于这里,使用:

// instead of: import myConsts from 'SomewhereElse';
import { something as somethingElse, another } from 'SomewhereElse';

但是,当我使用...somethingElse().then(()=> ... 我得到一个错误 Possible promise rejection ... (SomewhereElse.something) is not a function

这也不是[关于修复一般is already definedeslint 错误的问题](Javascript standardjs - how to fix 'is already defined'?),因为我不是在谈论编写我的代码,而是如何导入和使用别人的两个包当他们有这个冲突问题时。

标签: javascriptimportecmascript-6moduleconstants

解决方案


不,我认为您不能忽略该警告,因为同一范围内存在 2 个同名变量。

您可能需要以这种方式导入:

import { connect as somethingElse} from 'react-redux';

避免使用同名的变量。

我希望它会帮助你


推荐阅读