为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PIPIONE 2019-07-03 15:48:02
是否可以使用通配符从目录中的所有文件导入模块?使用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/*';或者类似的东西,使用理解的约定,即每个文件包含一个默认导出,并且每个模块的名称与其文件相同。这个是可能的吗?
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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

在此之前,您可以在lib/things/index.js只是包含了

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

它可以让你

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


查看完整回答
反对 回复 2019-07-03
?
撒科打诨

TA贡献1934条经验 获得超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'


查看完整回答
反对 回复 2019-07-03
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

当前的答案给出了一个解决方案,但它让我无法解释为什么不存在,所以我创建了一个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/*';

工作原理与上述相同。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 664 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信