根据文件结构生成md文件目录

128 阅读1分钟
import * as fs from 'fs';
import * as path from 'path';
const rootDir = '../assets/tutorials'; // 根目录
// const outputFile = '../assets/tutorials/sidebar目录.md'; // 输出到tutorials文件夹
const outputFile = 'sidebar目录.md'; // 输出文件名

//     const filePath = path.join(dir, file);
//     const stats = fs.statSync(filePath);
//   if (stats.isDirectory()) {
//       if (path.extname(file) === '.md') {
//         const relativePath = path.relative(rootDir, filePath);
//         const link = relativePath.replace(/\\/g, '/');
//         result.push(`${'  '.repeat(depth)}- [${path.basename(file, '.md')}](${link})`);
// 递归遍历目录,返回目录结构的数组
/**
 *  ts-node .\exportMdDirectory.ts执行在当前目录下会生成一个sidebar文件
 */
function traverseDir(dir: string, depth: number): string[] {
  const files = fs.readdirSync(dir);
  const result: string[] = [];
  const subDirs: string[] = [];
  files.forEach((file) => {
    const filePath = path.join(dir, file);
    const stats = fs.statSync(filePath);
    if (stats.isDirectory()) {
      // 如果是目录,递归遍历子目录
      const subDir = traverseDir(filePath, depth + 1);
      if (subDir.length > 0) {
        subDirs.push(`${'  '.repeat(depth)}- **${file}**`);
        subDirs.push(...subDir);
      }
    } else {
      // 如果是文件,生成Markdown链接
      if (path.extname(file) === '.md') {
        const relativePath = path.relative(rootDir, filePath);
        const link = relativePath.replace(/\\/g, '/');
        result.push(`${'  '.repeat(depth)}- [${path.basename(file, '.md')}](${link})`);
      }
    }
  });
  return [...subDirs, ...result];
}
// 生成Markdown目录
function generateMarkdownDir() {
  const dir = traverseDir(rootDir, 0);
  const content = dir.join('\n');
  fs.writeFileSync(outputFile, content);
  console.log(`已生成Markdown目录:${outputFile}`);
}
generateMarkdownDir();