问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

写好的Markdown怎么生成HTML

发布网友 发布时间:2022-04-20 05:47

我来回答

1个回答

热心网友 时间:2022-04-06 04:34

在简书里写文章时,有个预览模式,左边用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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我这个配置能玩大唐无双2吗 PK什么的能卡么? 求高手解答 这样的配置还要加什么玩大唐无双才不卡 这个配置能玩大唐无双双开吗? windows7旗舰版系统玩大唐无双零双开卡怎么办?卡死了。 玩大唐无双的时候双开过地图太卡怎么解决啊 全民枪战我用QQ号,但它说密码数字英文,下划线组成,应该怎样弄啊?_百 ... 小太阳取暖器头晕呕吐 取暖器用的会头晕吗,可能的原因和使用注意事项 男孩姓孙含越字好名字 简单特别的男孩名字越 中间是越的男孩名字大全 为知笔记windows版,不知道怎么给笔记排序 如何使用markdown画思维导图 windows 为知笔记怎么写markdown 逐光启航背景音乐是什么? 求一首英文歌曲? 演讲放飞梦想+青春起航配什么音乐好? 要轻音乐 韩国,你的故事从此启航广告中的背景音乐叫什么?_? 适合诗朗诵 《梦想起航》的背景音乐,诗要朗诵4.5... 求云南卫视,起航吧,少年,广告宣传片的英文背景... 启航2021中央广播电视总台跨年晚会开场白背景音乐... 求音乐:《起航》张睿 李晟 适合梦想的配乐,纯音乐的,演讲的主题是《让梦想... 求一篇关于《让梦想起航,让青春飞扬》演讲稿的背... 牛欣欣朗诵起航的背景音乐是什么? 我们扬帆起航,向(朝)着胜利的方向。是一首歌里的... 班会主题:畅想启航~有没有推荐的配乐?越多越好~... QQ上他忙碌状态,给他发了消息他能看到吗,前提是系统给我自动回复了 童声朗朗牛欣欣朗诵起航的背景音乐是什么?有人知... 大发明家哪个皮肤好看,特效炫 大发明家哪个皮肤最好看 有人在windows里编译为知笔记的吗 markdown 写文档以后怎样实现目录,页眉,页脚 如何使用Sublime Text 3作为Markdown编辑器 如何在markdown里使引用行背景是黑色的 如何将Markdown文件转换成HTML? 除印象笔记外还有什么笔记软件是有模板可以选择的? Sublime Text 3怎么设置为Markdown编辑器 如何让wordpress支持markdown 比较好用的写作APP有哪些? 怎么把Markdown文件转换为PDF JavaScript-markdown 时 code 语法高亮都有什么方案 怎样使用editor.md把markdown转换成html 有道笔记的markdown支持字体颜色修改吗 怎么在简书插入视频 捕鱼大决战兑换码是 最近一直在玩捕鱼游戏现在想玩可以兑换支付宝的 扑鱼大咖兑换码在什么地方使用 QQ显示忙碌是什么意思 什么原因导致微信支付受到限制? 微信的钱在什么条件下才可以支付呢?