是否可以使用通配符从目录中的所有文件导入模块?

新手上路,请多包涵

使用 ES6,我可以从这样的文件中导入多个导出:

import {ThingA, ThingB, ThingC} from 'lib/things';

但是,我喜欢每个文件有一个模块的组织。我最终得到这样的进口:

import ThingA from 'lib/things/ThingA';
import ThingB from 'lib/things/ThingB';
import ThingC from 'lib/things/ThingC';

我希望能够做到这一点:

import {ThingA, ThingB, ThingC} from 'lib/things/*';

或类似的东西,每个文件都包含一个默认导出,并且每个模块的名称与其文件相同。

这可能吗?

原文由 Joe Frambach 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

我认为这是不可能的,但是模块名称的解析取决于模块加载器,因此可能有一个加载器实现支持这一点。

在那之前,你可以在 lib/things/index.js 使用一个中间“模块文件”,它只包含

export * from 'ThingA';
 export * from 'ThingB';
 export * from 'ThingC';

它会让你做

import {ThingA, ThingB, ThingC} from 'lib/things';

原文由 Bergi 发布,翻译遵循 CC BY-SA 3.0 许可协议

只是答案中已经提供的主题的变体,但是这个怎么样:

Thing 中,

 export default function ThingA () {}

things/index.js

 export {default as ThingA} from './ThingA'
export {default as ThingB} from './ThingB'
export {default as ThingC} from './ThingC'

然后消费其他地方的所有东西,

 import * as things from './things'
things.ThingA()

或者只消费一些东西,

 import {ThingA,ThingB} from './things'

原文由 Jed Richards 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题