UNPKG

jsdoctoveps

Version:

js -> markdown-> vitepress

93 lines (85 loc) 3.21 kB
import fsExtra from "fs-extra" import path from "path" /** * 引入脚本获取 base_config.json 配置 * scanDir 要扫描的目录 */ import { jsonData } from "../.vitepress/obtainJson" let configData = jsonData(); let scanDir = configData.veps_outputDir ? configData.veps_outputDir : "mkdn"; const rootPath = path.join(__dirname, `../${scanDir}`); // 操作文件根目录 let sideDir = []; // 侧边栏结构容器 let isExist = false; //校验第一层目录下是否存在md文件 let otherId = ""; // 第一层目录下md容器位置 function generateStructure(route) { // 目录第一层级的处理函数 let list = fsExtra.readdirSync(route); list.forEach((item, index) => { let isDir = fsExtra.lstatSync(path.join(route, `${item}`)).isDirectory(); // 判断当前文件是否是文件夹 if (isDir) { let aimRoute = path.join(rootPath, `${item}`) sideDir.push({ collapsible: true, // 控制侧边栏能否折叠 collapsed: true, text: `${item}`, items: subDir(aimRoute, item) // 递归创建内部结构 }) } else { if (!isExist) { isExist = true; otherId = index; let aimFile = item.split("."); aimFile.pop(); sideDir.push({ collapsible: true, // 控制侧边栏能否折叠 collapsed: true, text: "others", items: [{ text: aimFile.join("."), link: `/${scanDir}/${aimFile.join(".")}` }] }) } else { let aimFile = item.split("."); aimFile.pop(); sideDir[otherId].items.push({ text: aimFile.join("."), link: `/${scanDir}/${aimFile.join(".")}` }) } } }) return sideDir; } /** subDir 生成子目录结构 * route 目标文件路径 * parentDir 父级目录路径 */ function subDir(route, parentDir) { // 子目录结构的处理函数 let result = []; let list = fsExtra.readdirSync(route); list.forEach((item) => { let isDir = fsExtra.lstatSync(path.join(route, `${item}`)).isDirectory(); if (isDir) { // 目录 let filePath = path.join(rootPath, parentDir, item); let parentPath = `${parentDir}/${item}` result.push({ collapsible: true, // 控制侧边栏能否折叠 collapsed: true, text: item, items: subDir(filePath, parentPath) }) } else { // 文件 let aimFile = item.split("."); aimFile.pop(); result.push({ text: aimFile.join("."), link: `/${scanDir}/${parentDir}/${aimFile.join(".")}` }) } }) return result; } // 主函数 export function createSideBar() { return generateStructure(rootPath); }