Is it possible to import modules from all files in a directory, using a wildcard?

前端 未结 13 2191
陌清茗
陌清茗 2020-11-22 04:25

With ES6, I can import several exports from a file like this:

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

However, I like the orga

13条回答
  •  迷失自我
    2020-11-22 04:39

    If you are using webpack. This imports files automatically and exports as api namespace.

    So no need to update on every file addition.

    import camelCase from "lodash-es";
    const requireModule = require.context("./", false, /\.js$/); // 
    const api = {};
    
    requireModule.keys().forEach(fileName => {
      if (fileName === "./index.js") return;
      const moduleName = camelCase(fileName.replace(/(\.\/|\.js)/g, ""));
      api[moduleName] = {
        ...requireModule(fileName).default
      };
    });
    
    export default api;
    

    For Typescript users;

    import { camelCase } from "lodash-es"
    const requireModule = require.context("./folderName", false, /\.ts$/)
    
    interface LooseObject {
      [key: string]: any
    }
    
    const api: LooseObject = {}
    
    requireModule.keys().forEach(fileName => {
      if (fileName === "./index.ts") return
      const moduleName = camelCase(fileName.replace(/(\.\/|\.ts)/g, ""))
      api[moduleName] = {
        ...requireModule(fileName).default,
      }
    })
    
    export default api
    

提交回复
热议问题