循环中的ES6导入

Ves*_*smy 9 javascript import loops ecmascript-6

有没有办法在ES6中使用for-of-loop(或其他循环)导入和导出多个文件?

const moduleNames = ['NumberUtils', 'StringUtils', 'ArrayUtils', 'MyModule', 'AnotherModule', 'BaseModule']

let modules = {}

for (const moduleName of moduleNames) {
    import module from './' + moduleName
    modules.moduleName = module
}

export modules
Run Code Online (Sandbox Code Playgroud)

没有循环我必须写:

import NumberUtils from './NumberUtils'
import StringUtils from './StringUtils'
import ArrayUtils from './ArrayUtils'
import MyModule from './MyModule'
import AnotherModule from './AnotherModule'
import BaseModule from './BaseModule'

export {
    NumberUtils,
    StringUtils
    ArrayUtils
    MyModule
    AnotherModule
    BaseModule
}
Run Code Online (Sandbox Code Playgroud)

Pio*_*r O 7

我认为更好、更清晰的方法是创建一个索引文件,然后在一次导入中导入多个组件。

//index.js
import PopUp from './PopUp';
import ToggleSwitch from './ToggleSwitch';

export {
  PopUp,
  ToggleSwitch
};

//app.js

import { PopUp, ToggleSwitch } from './components';
Run Code Online (Sandbox Code Playgroud)


Est*_*ask 6

ES模块的主要特征之一是可以静态分析它们.因此,import语句遵循严格的语法 - 也是如此export.一个代码片段"无循环"是必须要做的事情.

这允许在IDE和工具中精确计算模块导入和导出.例如,这对树木摇晃很有用.


Ves*_*smy 6

对于多个导入文件,我找到了这个解决方案:

const files = require.context('../myFolder', true, /(Module|Utils)\.js$/)
Run Code Online (Sandbox Code Playgroud)

  • 它仅对 Webpack 有效。一般不适用于 ES6。 (2认同)