写好的Markdown怎么生成HTML 200

 我来答
myloverdeone
2017-08-06 · TA获得超过105个赞
知道答主
回答量:76
采纳率:50%
帮助的人:45.3万
展开全部

在简书里写文章时,有个预览模式,左边用markdown语法写,右边能实时预览到最终效果,今天看到一个实现类似功能的demo,所以准备写下来留个笔记

利用文件监视实现自动将markdown文件转换为html文档

实现思路:

利用 fs模块的文件监视功能fs.watch(filename,listener)监视指定markdown文件. (可以理解为发布订阅模式,每当文件发生变化,发布消息,订阅者收到消息)

当文件发生变化后,借助 marked包提供的markdown to html 功能将改变后的md文件转换为html格式。

将得到的html以及读入的css文件替换到模板,得到最终要渲染的html.

最后利用BrowserSync模块实现浏览器自动刷新,即每当改变markdown文件,浏览器中会自动刷新显示

代码不多:

const fs = require('fs');
const path = require('path');
const marked = require('marked');
const browserSync = require('browser-sync');//接收需要转换的文件路径
const target = path.join(__dirname, process.argv[2] || 'README.md')//最终生成的html文件的位置
const filename = target.replace(path.extname(target), '.html')//获取html文件名
const indexpath = path.basename(filename);//通过browser-sync创建一个文件服务器
browserSync({
    notify: false,
    server: path.dirname(target),//网站根目录
    index: indexpath//默认文档
})//监视文件变化,可以理解为当文件发生变化(需要保存才能触发文件变化),interval时间间隔后调用回调函数
fs.watchFile(target, { interval: 200 }, (cur, prev) => {
    // console.log(`current:${cur.size} previous:${prev.size}`);
    //判断文件的最后修改时间是否改变,减少不必要的转换
    if (cur.mtime === prev.mtime) {
        return false;
    }
    fs.readFile(target, 'utf8', (err, content) => {
        if (err) {
            throw err;
        }
        let html = marked(content);
        // console.log(html);
        fs.readFile(path.join(__dirname, 'github.css'), 'utf8', (err, css) => {
            html = template.replace('{{{content}}}', html).replace('{{{styles}}}', css);
            // console.log(html);
            fs.writeFile(filename, html, (err) => {
                if (err) {
                    throw err;
                }
                browserSync.reload(indexpath);
                console.log('updated@' + new Date());
            })
        })
    })
})
const template = `<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>Markdown to Html</title>
    <style>{{{styles}}}</style></head><body>
    <div class='vs'>
    {{{content}}}
    </div>
</body>
</html>`;

运行后每当改变markdown文件(ctrl+s),页面会自动刷新,和简书的预览效果基本差不多。

源码:https://github.com/Hfimy/markdownTohtml

参考:http://www.jianshu.com/p/f697a5471cc3

博思aippt
2024-07-20 广告
博思AIPPT是基于ai制作PPT的智能在线工具,它提供了4种AI制作PPT的方式,包括AI生成大纲、AI直接生成PPT、文本生成PPT、AI提炼文档生成PPT,一站式集成多种AI生成PPT的方式,可满足办公用户的不同需求和使用场景。ai生... 点击进入详情页
本回答由博思aippt提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式