index.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-01-05 10:19:11
  4. * @LastEditTime: 2021-02-07 12:01:46
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: \vue_3.0_test\src\mock\map.js
  8. */
  9. const path = require("path");
  10. const fs = require("fs");
  11. const getPathInfo = (p) => path.parse(p);
  12. /**
  13. * @description // 递归读取文件,类似于webpack的require.context()
  14. *
  15. * @param {String} directory 文件目录
  16. * @param {Boolean} useSubdirectories 是否查询子目录,默认false
  17. * @param {array} extList 查询文件后缀,默认 ['.js']
  18. *
  19. */
  20. function autoLoadFile(directory, useSubdirectories = false, extList = [".js"]) {
  21. const filesList = {};
  22. // 递归读取文件
  23. function readFileList(directory, useSubdirectories, extList) {
  24. const files = fs.readdirSync(directory);
  25. files.forEach((item) => {
  26. const fullPath = path.join(directory, item);
  27. const stat = fs.statSync(fullPath);
  28. if (stat.isDirectory() && useSubdirectories) {
  29. readFileList(
  30. path.join(directory, item),
  31. useSubdirectories,
  32. extList
  33. );
  34. } else {
  35. const info = getPathInfo(fullPath);
  36. if (extList.includes(info.ext)) {
  37. filesList[info.name] = require(fullPath);
  38. }
  39. }
  40. });
  41. }
  42. readFileList(directory, useSubdirectories, extList);
  43. return filesList;
  44. }
  45. module.exports = autoLoadFile(path.join(__dirname, "./modules"));