首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以使用通配符从目录中的所有文件导入模块?

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

Stack Overflow用户
提问于 2015-04-19 04:10:41
回答 10查看 288K关注 0票数 317

使用ES6,我可以从一个文件中导入多个导出,如下所示:

代码语言:javascript
复制
import {ThingA, ThingB, ThingC} from 'lib/things';

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

代码语言:javascript
复制
import ThingA from 'lib/things/ThingA';
import ThingB from 'lib/things/ThingB';
import ThingC from 'lib/things/ThingC';

我希望能够做到这一点:

代码语言:javascript
复制
import {ThingA, ThingB, ThingC} from 'lib/things/*';

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

这个是可能的吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2015-04-19 04:45:15

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

在此之前,您可以在lib/things/index.js中使用一个只包含以下内容的中间“模块文件”

代码语言:javascript
复制
export * from 'ThingA';
export * from 'ThingB';
export * from 'ThingC';

它可以让你做

代码语言:javascript
复制
import {ThingA, ThingB, ThingC} from 'lib/things';
票数 278
EN

Stack Overflow用户

发布于 2015-07-14 17:16:02

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

Thing中,

代码语言:javascript
复制
export default function ThingA () {}

things/index.js中,

代码语言:javascript
复制
export {default as ThingA} from './ThingA'
export {default as ThingB} from './ThingB'
export {default as ThingC} from './ThingC'

然后在别处消费所有的东西,

代码语言:javascript
复制
import * as things from './things'
things.ThingA()

或者只消耗一些东西,

代码语言:javascript
复制
import {ThingA,ThingB} from './things'
票数 147
EN

Stack Overflow用户

发布于 2019-03-08 00:53:00

现在可以使用async import():

代码语言:javascript
复制
import fs = require('fs');

然后:

代码语言:javascript
复制
fs.readdir('./someDir', (err, files) => {
 files.forEach(file => {
  const module = import('./' + file).then(m =>
    m.callSomeMethod();
  );
  // or const module = await import('file')
  });
});
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29722270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档