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

2022-08-29 23:47:55

使用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/*';

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

这可能吗?


答案 1

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

在此之前,您可以使用中间的“模块文件”,该文件仅包含lib/things/index.js

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

它会允许你做

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

答案 2

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

在 , 中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'