UNPKG

slidev-addon-sm

Version:

slidev-addon slidev sm

157 lines (131 loc) 4.64 kB
#!/usr/bin/env node import { $, cd, fs, path } from "zx"; import { v4 as uuidv4 } from "uuid"; import { execSync, spawn } from "child_process"; const args = process.argv; const cmdPath = args[1]; // test // const cmdPath = args[3]+"/test"; // process.chdir(path.dirname(cmdPath)); const projectPath = process.cwd(); let frontmatterFilePath = projectPath + "/frontmatter.md"; if (!fs.existsSync(frontmatterFilePath)) { frontmatterFilePath = path.dirname(cmdPath) + "/frontmatter.md"; } await fs.copyFile(frontmatterFilePath, "./slides.md"); const customSort = (a, b) => { let str1 = a.split("-"); let str2 = b.split("-"); if (str1[0].length != str2[0].length) return str1[0].length - str2[0].length; return 0; }; /** * 删除文件夹下所有问价及将文件夹下所有文件清空 * @param {*} path */ function emptyDir(path) { if (fs.existsSync(path)) { const files = fs.readdirSync(path); files.forEach((file) => { const filePath = `${path}/${file}`; const stats = fs.statSync(filePath); if (stats.isDirectory()) { emptyDir(filePath); } else { fs.unlinkSync(filePath); } }); } } const doneExec = (slidevPath) => { // 过滤掉中文标题 let tArray = slidevPath.split("-"); let outDir = path.basename(tArray[0]).replace(".", "-"); outDir = "/" + outDir + "-" + tArray[2].replace(".md", ""); let outDirPath = "./lessions" + outDir; let cmd = "cross-env NODE_ENV=production pnpm build " + slidevPath + " --base " + outDir + " --out " + outDirPath; // console.log(`generate cmd: ${cmd}`); emptyDir(outDirPath); console.log(`清空${outDirPath}文件夹--->成功`); execSync(cmd, { stdio: "inherit" }); console.log(`生成${slidevPath}发布文件--->成功`); fs.unlinkSync(slidevPath); }; // 各章节ppt const lessionSlidesCreate = (lessionName) => { let dirPath = "./"; let lessionFrontmatterFilePath = "./frontmatter-viewer.md"; if (!fs.existsSync(lessionFrontmatterFilePath)) { lessionFrontmatterFilePath = path.dirname(cmdPath) + "/frontmatter-viewer.md"; } let lessionSlidesPath = dirPath + "/" + lessionName + ".md"; fs.copyFileSync(lessionFrontmatterFilePath, lessionSlidesPath); let tArray = lessionName.split("-"); let removeUuidLessionName = tArray[0] + "-" + tArray[1]; fs.appendFileSync(lessionSlidesPath, "---\n"); fs.appendFileSync( lessionSlidesPath, "src: ./pages/" + removeUuidLessionName + "/README.md\n" ); fs.appendFileSync(lessionSlidesPath, "---\n\n"); // 执行指令,生成dist doneExec(lessionSlidesPath); }; try { //检索pages下的md文件,并以序号排序 let files = fs.readdirSync("./pages/"); files.sort(customSort); let allSlidevFilePath = "./slides.md"; files.forEach((element) => { fs.appendFileSync(allSlidevFilePath, "---\n"); fs.appendFileSync( allSlidevFilePath, "src: ./pages/" + element + "/README.md\n" ); fs.appendFileSync(allSlidevFilePath, "---\n\n"); let currentLessionName = element + "-" + uuidv4().replace(/-/g, ""); let lessionNamesFile = "./lessions/lessionNames.txt"; let generateFlag = 1; // 是否生成html let bFound = 0; // 有没有在原记录文件名文件里找到名称 if (fs.existsSync(lessionNamesFile)) { let lessionNames = fs.readFileSync(lessionNamesFile); let allLessionNames = lessionNames.toString().split("\n"); // 找出原来的文件夹名称 allLessionNames.forEach((name) => { if (name.toString().includes(element.trim().toString()) && !bFound) { let tArray = name.split(" "); if (tArray.length > 1) { if (tArray[1].trim() == "0") { console.log(tArray[0] + " not generated"); generateFlag = 0; } currentLessionName = tArray[0]; } else { currentLessionName = name.trim().toString(); } bFound = 1; } }); } if (!bFound) { // 没找到原名称,则保存现在名称 fs.appendFileSync(lessionNamesFile, currentLessionName + "\n"); } if (generateFlag) { console.log(currentLessionName + " generated again!"); lessionSlidesCreate(currentLessionName); console.log(currentLessionName + " generated end!\n"); } else { console.log(currentLessionName + " pass!\n"); } }); } catch (err) { console.error(err); }