Files
gugu-note/scripts/generate-sidebar.js
2020-08-18 20:45:59 +08:00

76 lines
2.2 KiB
JavaScript

const path = require('path');
const fs = require('fs');
/**
* 扫描文件夹
*/
function scanFiles(dir, dirs = [], fileMap = {}, level = 0) {
const files = fs.readdirSync(dir);
if (dirs.length < level + 1) {
dirs.push([]);
}
files.forEach((item, index) => {
const fullPath = path.join(dir, item);
const stat = fs.statSync(fullPath);
if (!fileMap[dir]) {
fileMap[dir] = [];
}
fileMap[dir].push({
isDirectory: stat.isDirectory(),
file: fullPath
});
if (stat.isDirectory()) {
scanFiles(fullPath, dirs, fileMap, level + 1);
}
});
}
/**
* 自动生成侧边栏
* @param dir
* @param fileMap
* @param level
* @returns {string}
*/
function generateSideBar(dir, fileMap, level = 0, projectHomePath) {
let result = "";
if (!fileMap[dir])
return "";
let indent = '';
for (let i = 0; i < level; i++) {
indent += ' ';
}
fileMap[dir].forEach((item, index) => {
if ((item.isDirectory || path.extname(item.file) === '.md') && !item.file.startsWith(path.join(dir, '_'))) {
if (item.isDirectory) {
const tmp = generateSideBar(item.file, fileMap, level + 1, projectHomePath);
if (tmp) {
result += "\n\n";
result += indent;
result += `- **${path.relative(dir, item.file)}**`;
result += tmp;
}
} else {
result += "\n";
result += indent;
result += `- [${path.basename(item.file).replace(path.extname(item.file), '')}](${item.file.replace(projectHomePath, '')})`;
}
}
});
return result;
}
const dirs = [];
const fileMap = {};
const projectHomePath = path.join(__dirname, '..'); // 项目主目录
// 扫描项目文件
scanFiles(projectHomePath, dirs, fileMap);
// 从项目根目录开始处理
const slideBarMd = generateSideBar(projectHomePath, fileMap, 0, projectHomePath);
fs.writeFileSync(path.join(projectHomePath, '_sidebar.md'), slideBarMd, 'utf8');
// console.log(dirs);
// console.log(fileMap);