Md2site是基於Omi的一款Markdown轉網站工具,使用簡單,生成的文件輕巧,功能強大。html
在使用以前的版本的時候,你會發現體驗很是好?爲何很是好?由於頁面間的切換是無刷新!
無刷新的原理就是,全部的markdown都會被webpack打包到js裏,只要在js動態require就行。webpack
這樣帶來的一個問題即是:若是有海量的markdown的時候,首次加載的時間很是長。git
怎麼解決?支持動態拉取和解析markdown~~github
$ npm install md2site -g $ md2site init your_project_name $ cd your_project_name $ npm run dev $ npm run dist
全部命令都是和之前同樣的。接下來,打開project.js:web
module.exports = { cdn : '', async: true }
夠方便吧!!一鍵配置!!npm
當咱們設置async爲true的時候,不是但願webpack把markdown打包入js裏的,因此在webpack config作了以下操做:markdown
var proj_config = require('./project.js'); if(proj_config.async) { config.module.loaders[3].exclude = /\.md$/; }
其中config.module.loaders[3]就是配置的markdown loader。exclude就表明把相關的正則匹配到的文件直接給無視掉。app
loadMarkdown(url,callback) { var xobj = new XMLHttpRequest(); xobj.open('GET', url, true); xobj.onreadystatechange = function () { if (xobj.readyState == 4 && xobj.status == "200") { callback(xobj.responseText); } }; xobj.send(null); }
加載完後直接交給remarkable解析成HTML,remarkable解析成HTML的速度超快到你沒法感知,因此提早生成好HTML不是很是必要。異步
asyncUpdate() { this.loadMarkdown("../../docs/" + this.data.lan + "/" + this.data.name + ".md",(md)=>{ this.data.html = this.md.render(md); this.update(); }) }
異步的刷新組件。async
詳細的代碼能夠看這裏
歡迎使用~~