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

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

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

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

这个是可能的吗?


PIPIONE
浏览 665回答 3
3回答

牛魔王的故事

我认为这是不可能的,但是AFAIK模块名称的解析取决于模块加载器,因此可能会有一个加载器实现来支持这一点。在此之前,您可以在lib/things/index.js只是包含了export * from 'ThingA';export * from 'ThingB';export * from 'ThingC';它可以让你import {ThingA, ThingB, ThingC} from 'lib/things';

撒科打诨

只是对答案中已经提供的主题做了一个变化,但这是怎么回事呢?在.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'

幕布斯6054654

当前的答案给出了一个解决方案,但它让我无法解释为什么不存在,所以我创建了一个babel做这个的插件。安装时使用:npm i --save-dev babel-plugin-wildcard然后将其添加到您的.babelrc有:{     "plugins": ["wildcard"]}见回购有关详细安装信息这允许您这样做:import * as Things from './lib/things';// Do whatever you want with these :DThings.ThingA;Things.ThingB;Things.ThingC;再次,回购包含更多关于它到底做了什么的信息,但是这样做可以避免创建index.js文件,并且也会在编译时发生,以避免执行readdir在运行时。同样,对于更新的版本,您可以做与示例完全相同的操作: import { ThingsA, ThingsB, ThingsC } from './lib/things/*';工作原理与上述相同。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript