init-dirs.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * 目录初始化模块 - 确保应用需要的所有目录都存在
  3. */
  4. const fs = require('fs').promises;
  5. const path = require('path');
  6. const logger = require('./logger');
  7. /**
  8. * 确保所有必需的目录存在
  9. */
  10. // 添加缓存机制
  11. const checkedDirs = new Set();
  12. async function ensureDirectoriesExist() {
  13. const dirs = [
  14. // 文档目录
  15. path.join(__dirname, 'documentation'),
  16. // 日志目录
  17. path.join(__dirname, 'logs'),
  18. // 图片目录
  19. path.join(__dirname, 'web', 'images'),
  20. // 数据目录
  21. path.join(__dirname, 'data'),
  22. // 配置目录
  23. path.join(__dirname, 'config'),
  24. // 临时文件目录
  25. path.join(__dirname, 'temp'),
  26. // session 目录
  27. path.join(__dirname, 'data', 'sessions'),
  28. // 文档数据目录
  29. path.join(__dirname, 'web', 'data', 'documentation')
  30. ];
  31. for (const dir of dirs) {
  32. if (checkedDirs.has(dir)) continue;
  33. try {
  34. await fs.access(dir);
  35. logger.info(`目录已存在: ${dir}`);
  36. } catch (error) {
  37. if (error.code === 'ENOENT') {
  38. try {
  39. await fs.mkdir(dir, { recursive: true });
  40. logger.success(`创建目录: ${dir}`);
  41. } catch (mkdirError) {
  42. logger.error(`创建目录 ${dir} 失败: ${mkdirError.message}`);
  43. throw mkdirError;
  44. }
  45. } else {
  46. logger.error(`检查目录 ${dir} 失败: ${error.message}`);
  47. throw error;
  48. }
  49. }
  50. checkedDirs.add(dir);
  51. }
  52. // 确保文档索引存在,但不再添加默认文档
  53. const docIndexPath = path.join(__dirname, 'web', 'data', 'documentation', 'index.json');
  54. try {
  55. await fs.access(docIndexPath);
  56. logger.info('文档索引已存在');
  57. } catch (error) {
  58. if (error.code === 'ENOENT') {
  59. try {
  60. // 创建一个空的文档索引
  61. await fs.writeFile(docIndexPath, JSON.stringify([]), 'utf8');
  62. logger.success('创建了空的文档索引文件');
  63. } catch (writeError) {
  64. logger.error(`创建文档索引失败: ${writeError.message}`);
  65. }
  66. }
  67. }
  68. }
  69. // 如果直接运行此脚本
  70. if (require.main === module) {
  71. ensureDirectoriesExist()
  72. .then(() => logger.info('目录初始化完成'))
  73. .catch(err => {
  74. logger.error('目录初始化失败:', err);
  75. process.exit(1);
  76. });
  77. }
  78. module.exports = { ensureDirectoriesExist };