Files
ai-guide/.vuepress/scripts/genReadme.js
T
2025-02-13 15:00:17 +08:00

89 lines
3.0 KiB
JavaScript

// @ts-ignore
const fs = require("fs");
// @ts-ignore
const path = require("path");
// 定义生成 README.md 文件的函数
function genReadme(directory) {
if (!fs.existsSync(directory)) {
console.error(`错误:目录 "${directory}" 不存在`);
process.exit(1);
}
const dirName = path.basename(directory);
const readmeContent = generateContent(directory, dirName);
const readmePath = path.join(directory, "README.md");
// 写入 README.md 文件
fs.writeFileSync(readmePath, readmeContent);
console.log(`README.md 文件已生成在 ${readmePath},⚠️注意检查是否有问题!`);
}
// 递归生成 Markdown 内容
function generateContent(directory, dirName) {
let content = `# ${dirName}\n\n`;
content += `> 八股文一网打尽,更多面试题请看[程序员面试刷题神器 - 面试鸭](https://www.mianshiya.com/)\n\n`;
// 处理当前目录下的 Markdown 文件
const files = getFilesInDirectory(directory);
if (files.length > 0) {
for (let i = 0; i < Math.min(files.length, 10); i++) {
const file = files[i];
// 跳过 README.md 文件
if (path.basename(file).toLowerCase() === "readme.md") {
continue;
}
const relativePath = path.relative(directory, file)?.replaceAll(" ", "%20");
content += `[${path.basename(file, ".md")}](${relativePath})\n\n`;
}
}
// 处理子目录
const subDirs = getSubDirectories(directory);
for (const subDir of subDirs) {
const subDirName = path.basename(subDir);
// content += `## [${subDirName}](/${dirName}/${subDirName.replaceAll(" ", "%20")}/)\n`;
content += `## ${subDirName} \n`;
const subDirFiles = getFilesInDirectory(subDir);
for (let i = 0; i < Math.min(subDirFiles.length, 10); i++) {
const file = subDirFiles[i];
// 跳过 README.md 文件
if (path.basename(file).toLowerCase() === "readme.md") {
continue;
}
const relativePath = path.relative(directory, file)?.replaceAll(" ", "%20");
content += `[${path.basename(file, ".md")}](${relativePath})\n\n`;
}
}
// 添加底部内容
content += `> 八股文一网打尽,更多面试题请看[程序员面试刷题神器 - 面试鸭](https://www.mianshiya.com/)\n\n`;
return content;
}
// 获取目录下的所有子目录
function getSubDirectories(directory) {
const items = fs.readdirSync(directory, { withFileTypes: true });
return items.filter((item) => item.isDirectory()).map((dir) => path.join(directory, dir.name));
}
// 获取目录下的所有 Markdown 文件
function getFilesInDirectory(directory) {
const items = fs.readdirSync(directory, { withFileTypes: true });
return items
.filter((item) => item.isFile() && path.extname(item.name) === ".md")
.map((file) => path.join(directory, file.name));
}
// 从命令行参数获取目标目录
const targetDirectory = process.argv[2];
if (!targetDirectory) {
console.error("错误:请提供目标目录路径作为参数");
process.exit(1);
}
// 调用生成 README.md 文件的函数
genReadme(targetDirectory);