不列举具体名称,直接导入所有已命名导出的内容,并使用其导出名称。

5

我有一个名为modules.js的文件,按照模块名称(遵循ES6在索引文件中导出/导入的方式),导出所有模块的default导出:

export { default as a } from './a/a'
export { default as b } from './b/b'
...
export { default as y } from './y/y'
export { default as z } from './z/z'

在我的app.js中,我想要导入这个模块包。我希望从module.js中导入从a到z的导出变量,以便在app.js中使用它们。显然,我不想这样做。
import { a, b, c, d, ... , x, y, z } from './modules/modules'

由于这样会非常冗长,每当我在module.js中添加模块时,还必须更改app.js中的import。为了解决这个问题,我尝试了

import * from './modules/modules'

但是这些变量在app.js中不可用。

问题:如何简单地导入所有命名的导出,并使用它们的导出名称?

示例模块./modules/a/a.js

export default function a() {
  // whatever
}

你可以这样做 import m from './modules/modules',然后通过 m.a 或者 m.b 访问变量... 我觉得这不会花费太多。 - Mohit
@Mohit 这可能不会花费很多,但是难道没有可能在不需要所有者对象的情况下导入吗? - connexo
在使用import * as foo from ...时,拥有一个模块命名空间对象并不会增加额外的成本。事实上,通过拥有它,引擎可以提前知道变量来自哪里,从而更好地优化您的代码。 - loganfsmyth
据我所知,在当前的 ECMAScript 6 版本中,没有任何可能实现你期望的方式。 - Mohit
1个回答

5

只需尝试使用 import * as sampleModule from './modules/modules' 导入模块,您就可以使用 sampleModule 变量来利用模块中的所有导出函数。

您还可以使用 import './modules/modules' 导入模块。


是否可以在没有主机对象的情况下进行导入? - connexo
最好使用以下代码: import './modules/modules'; - Prasanna Brabourame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接