前言随着wordpress和静态网站的流行,markdown用的越来越多。我们已经介绍了很多Markdown编辑器,但有时您需要一个程序来处理Markdown文本。markdown是用于写作的语法引擎。markdown的最终目的是解析成html供网页浏览,所以兼容html语法,即可以在markdown文档中使用原生的html标签。markdown解析器在开发静态网站生成器时,会使用一种叫做frontmatter的格式,将网站内容写成类似下面的格式---title:Toplaymarkdown,youneedtousethesetoolsdate:2016-08-1416:44:54image:/img/pencils-762555_640.jpg---##前言随着wordpress和静态网站的流行,markdown用的越来越多。...生成网站时,需要解析markdown,然后渲染成html页面。您使用什么工具进行解析?markedmarked是最早用node.js开发的markdown解析器,同时提供CLI命令调用和node.jsAPI调用。CLI调用代码示例$marked-ohello.htmlhelloworld^D$cathello.html
helloworld
API调用示例varmarked=require('marked');console.log(marked('Iamusing__markdown__.'));//Outputs:
Iamusingma??rkdown.
这些是一些通用的功能,但是marked也支持代码高亮,使用highlight.js。代码高亮相信大家都用过highlight.js。可能你不知道highlight.js也支持API调用。以下代码将配置标记为使用highlight.js进行代码高亮:marked.setOptions({highlight:function(code,lang){varres;if(lang){res=hljs.highlight(lang,code,true).value;}else{res=hljs.highlightAuto(code).value;}returnres;}});生成的代码已经包含代码高亮标签。最后只需要引入highlight.js这个主题就可以展示了。highlight.js的所有颜色主题都在这里。markdown-jsmarkdown-js也是一个用node.js开发的markdown解析器,基本用法和marked差不多,但是文档好像没有提到marked这样的代码高亮生成的接口。感兴趣的同学可以自行查找。markdowngeneratorto-markdown什么是markdown生成器,就是根据html标签生成markdown文件。github上star数最高的markdown生成器是to-markdown。简单的代码示例vartoMarkdown=require('to-markdown');toMarkdown('
Helloworld!
');to-markdown最近更新了,增加了对gfm的兼容性,这是gitflavoredmarkdown的意思是github扩展了markdown语法。使用gfm的例子toMarkdown('
Helloworld!',{gfm:true});这个to-markdown有什么用?举个简单的例子,如果我想开发一个简单的RSS阅读浏览器,但是又不想跳转到目标网站阅读,因为不同的网站风格不同,导致阅读体验不一致。该怎么办?然后抓取网站内容,然后使用to-markdown生成markdown文件,再使用自己的模板样式统一渲染。当然,删除广告只是一个副作用。除了to-markdown,heckyesmarkdown还有一个有用的API:heckyesmarkdown。本项目使用php-readability来提高文章的可读性。可惜heckyesmarkdown一直没有开源。这个项目有点老了。估计那个时候github还不流行。heckyesmarkdow对中文的支持不是很友好。如果要爬中文网站,用to-markdown比较靠谱。frontmattermarkdown写文章确实方便,简单好用,但是markdown不能保存元数据,比如作者、日期、类型等结构化数据。如果生成HTML标签,提取起来会有点麻烦,得用cheerio来完成。因此,为了方便保存文章的元数据,几乎所有的静态网站生成器都采用frontmatter格式来保存文章。前言文件通常分为标题和正文部分。header一般使用三种格式:yaml、toml、json。前题解析工具需要识别这三种格式的文件头。文本部分是正常的markdown内容。front-matterfront-matter也是用node.js开发的。与markdown解析器相比,fornt-matter解析器要简单得多。示例文件example.md---title:Justhack'ndescription:Nothingtoseehere---Thisissometextaboutsomestuffthathappenedsometimeagoparsingcodevarfs=require('fs'),fm=require('front-matter')fs.readFile('./example.md','utf8',function(err,data){if(err)throwerrvarcontent=fm(data)console.log(content)})解析结果{attributes:{title:'Justhack\'n',description:'Nothingtoseehere'},body:'\nThisissometextaboutsomestuffthathappenedsometimeago',frontmatter:'title:Justhack\'n\ndescription:Nothingtoseehere'}frontmatter虽然格式看起来不太统一,但它是对markdown的有力补充。