UNPKG

chasejia_js-vitepress

Version:

js -> markdown-> vitepress

82 lines (75 loc) 3.17 kB
const fs = require('fs-extra'); const path = require('path'); const jsdoc2md = require('jsdoc-to-markdown'); // const ora = require('ora'); // ora_初始化并设置加载中时的文本信息 const { getEntries } = require('./utils'); const { jsdocConfigPath, mdTemplatePath, mdDirPath } = require('../config'); const template = fs.readFileSync(mdTemplatePath, 'utf-8'); const generateMarkdown = async () => { // const loading = ora('Generates Markdown'); try { await deleteDirectory(mdDirPath); //删除目标文件夹,mdDirPath->要处理的目标文件夹 const markdownDirs = getEntries(); // 获取输入与输出目录 await Promise.all( markdownDirs.map(async (sourceObject) => { //对当前的目录进行循环处理 const { root, output, ingoreList = [] } = sourceObject; await generateMarkDownForFiles(root, output, ingoreList); }) ); // loading.succeed('Generates Markdown success'); } catch (error) { // loading.fail(`Generates Markdown fail: ${error}`); } }; const generateMarkDownForFiles = async (root, output, ingoreList) => { // fs.readdir()方法用于异步读取给定目录的内容 const fileList = await fs.readdir(root); // 读取我们当前目录下的文件 await Promise.all( fileList.map(async (fileName) => { // 扫描目标目录下的文件 if (ingoreList.indexOf(fileName) === -1) { // 对当前目录进行校验 await generateMarkdownDocs(fileName, root, output); } }) ); }; /** * 生成 markdown * @param sourceName 目标文件名 * @param sourceRootPath 目标文件所在文件夹名 * @param outputPath 生成文件所在文件夹名 * @return {Promise<void>} */ const generateMarkdownDocs = async (sourceName, sourceRootPath, outputPath) => { let sourcePath = `${sourceRootPath}/${sourceName}`; const outputName = sourceName.replace('.js', '').replace('.ts', ''); // 去除当前目标文件的后缀 // const loading = ora(`Generates Markdown for ${sourcePath}`); try { if (outputName === 'index') return; const mdStr = await jsdoc2md.render({ template: template, 'example-lang': 'javascript', files: path.resolve(process.cwd(), sourcePath), 'name-format': 'backticks', 'heading-depth': 2, 'module-index-format': 'none', configure: jsdocConfigPath }); if (mdStr) { fs.outputFile(path.resolve(process.cwd(), `${outputPath}/${outputName}.md`), mdStr); } } catch (error) { console.log(error); // loading.fail(`Generates Markdown fail for ${sourcePath}: ${error}`); } }; // 删除指定目录 async function deleteDirectory(dirPath) { try { await fs.remove(dirPath); console.log(`Directory ${dirPath} deleted successfully.`); } catch (err) { console.error(`Error deleting directory ${dirPath}: ${err}`); } } generateMarkdown();