76 lines
2.2 KiB
JavaScript
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);
|