当前位置: 首页 > 知识库问答 >
问题:

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

翟展
2023-03-14

使用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个答案

范翰飞
2023-03-14

目前的答案提出了一个解决办法,但我对为什么不存在这个问题感到困惑,所以我创建了一个babel插件来实现这一点。

使用以下方式安装:

npm i --save-dev babel-plugin-wildcard

然后将其添加到您的.babelrc,方法是:

{
    "plugins": ["wildcard"]
}

有关详细安装信息,请参阅repo

这允许您这样做:

import * as Things from './lib/things';

// Do whatever you want with these :D
Things.ThingA;
Things.ThingB;
Things.ThingC;

同样,repo包含关于它具体做什么的更多信息,但这样做可以避免创建index.js文件,也可以在编译时进行,以避免在运行时执行readdirs。

此外,对于较新版本,您可以完全按照您的示例执行:

 import { ThingsA, ThingsB, ThingsC } from './lib/things/*';

工作原理与上述相同。

夏宏旷
2023-03-14

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

在一个东西中,

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'
濮书
2023-03-14

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

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

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

它会让你做

import {ThingA, ThingB, ThingC} from 'lib/things';
 类似资料:
  • 问题内容: 使用ES6,我可以从这样的文件导入多个导出: 但是,我喜欢每个文件有一个模块的组织。我最终得到这样的进口: 我希望能够做到这一点: 或类似的名称,并且每个文件都包含一个默认导出,并且每个模块的名称与其文件相同。 这可能吗? 问题答案: 我认为这不可能,但是模块名称的解析取决于模块加载器,因此可能有支持此功能的加载器实现。 在此之前,您可以使用仅包含以下内容的中间“模块文件” 它会让你做

  • 问题内容: 我正在研究一个小的Java程序,并且正在使用数组,所以我做到了: 后来,我开始扩展以前做过的事情,并决定要从用户那里得到输入,因此我添加了: 现在发生了一个想法。我知道我可以这样做: 然后,我只需要1条导入行,而不是2条(或者我最终需要很多条),但是导入中的通配符是否意味着它将从该包中导入 所有内容 ,而不管是否需要它,或者仅将选择性功能被拉? 我的直觉是编写更多代码,仅包含我 知道

  • 问题内容: 目录结构: module1.py: 我如何才能将所有模块从模块添加到主类而没有前缀(即像foo = fooBar()一样使用它们,而不是foo = my_modules.module1.fooBar())。 一个明显的决定是在main.py中编写如下内容: 但是我不想在创建新的moduleN时更改main.py。有解决方案吗? 我确实知道导入这样的类不是一个好主意,但是我对此仍然很好奇

  • 问题内容: 我有以下测试方法,该方法使用从包中导入的函数。 可以在golang中进行模拟吗? 问题答案: 是的,只需进行简单的重构即可。创建一个函数类型的变量,用初始化,并让您的包调用而不是: 在测试中,您可以为分配另一个功能,该功能是在测试中定义的,并且可以执行测试所需的功能。 例如:

  • 我有一个这样的文件结构: 在笔记本中的文件我想从和。 我已经找到了这个问题的答案,可以在每个笔记本中使用以下代码行,并每次将这些代码行作为第一个单元格运行: 有没有更好的办法?如果我有很多笔记本中的文件文件夹,我是否必须将这些代码行粘贴到每一行的开头?有更好、更简约或更干净的方法吗?

  • 所以我开始使用Neovim /Spacevim,它真是太棒了! 我仍然在习惯一切,因为我以前从未使用过Vim或类似的东西。 我的问题围绕着在当前打开的项目的所有文件中搜索特定文本。 我正在使用文件管理器,我想知道如何在项目中的所有文件中搜索特定字符串。就像如果我想在当前打开的文件夹/目录中搜索,我该如何去做?主要目标是列出包含此搜索字符串的所有文件。 我已经安装了(以及),但在搜索所有文件中的特定