index.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. const path = require("path");
  2. const fs = require("fs");
  3. const getPathInfo = (p) => path.parse(p);
  4. /**
  5. * @description // 递归读取文件,类似于webpack的require.context()
  6. *
  7. * @param {String} directory 文件目录
  8. * @param {Boolean} useSubdirectories 是否查询子目录,默认false
  9. * @param {array} extList 查询文件后缀,默认 ['.js']
  10. *
  11. */
  12. function autoLoadFile(directory, useSubdirectories = false, extList = [".js"]) {
  13. const filesList = {};
  14. // 递归读取文件
  15. function readFileList(directory, useSubdirectories, extList) {
  16. const files = fs.readdirSync(directory);
  17. files.forEach((item) => {
  18. const fullPath = path.join(directory, item);
  19. const stat = fs.statSync(fullPath);
  20. if (stat.isDirectory() && useSubdirectories) {
  21. readFileList(
  22. path.join(directory, item),
  23. useSubdirectories,
  24. extList
  25. );
  26. } else {
  27. const info = getPathInfo(fullPath);
  28. if (extList.includes(info.ext)) {
  29. filesList[info.name] = require(fullPath);
  30. }
  31. }
  32. });
  33. }
  34. readFileList(directory, useSubdirectories, extList);
  35. return filesList;
  36. }
  37. module.exports = autoLoadFile(path.join(__dirname, "./modules"));