实现思路:
- 01 读取 md 和 css 内容
- 02 将上述读取进去的内容替换占位符,生成一个最终须要展的 Html 字符串
- 03 将上述的 Html 字符写入到指定的 Html 文件中
- 04 监听 md 文档内容的变经,而后更新 html 内容
- 05 应用 browser-sync 来实时显示 Html 内容
须要用到两个依赖包
{ "name": "04-md", "version": "1.0.0", "main": "index.js", "license": "MIT", "devDependencies": { "browser-sync": "^2.27.9", "marked": "^4.0.14" }}
实现代码
const fs = require("fs");const path = require("path");const { marked } = require("marked");const browserSync = require("browser-sync");let mdPath = path.join(__dirname, process.argv[2]);let cssPath = path.resolve("github.css"); // 初始化款式let htmlPath = mdPath.replace(path.extname(mdPath), ".html");console.log(mdPath, cssPath, htmlPath);// 监听fs.watchFile(mdPath, (cur, pre) => { if (cur.mtime !== pre.mtime) { fs.readFile(mdPath, "utf-8", (err, data) => { // 将 md-->html let htmlStr = marked(data); fs.readFile(cssPath, "utf-8", (err, data) => { let retHtml = temp .replace("{{content}}", htmlStr) .replace("{{style}}", data); // 将上述内容写入到指定的html文件中,用于在浏览器中展现 fs.writeFile(htmlPath, retHtml, (err) => { console.log("html create successful"); }); }); }); }});browserSync.init({ browser: "", server: __dirname, watch: true, index: path.basename(htmlPath),});// html模板const temp = ` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> .markdown-body { box-sizing: border-box; min-width: 200px; max-width: 1000px; margin: 0 auto; padding: 45px; } @media (max-width: 750px) { .markdown-body { padding: 15px; } } {{style}} </style> </head> <body> <div class="markdown-body"> {{content}} </div> </body> </html>`;