Omi應用md2site-0.5.0發佈-支持動態markdown拉取解析

寫在前面

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
}
  • 你把async改爲true就表明會生成一個異步拉取和解析markdown的網站
  • 你把async改爲false就表明會生成一個徹底無刷新的網站

夠方便吧!!一鍵配置!!npm

原理解析

防止webpack打包markdown

當咱們設置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

動態加載markdown

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不是很是必要。異步

Async Update

asyncUpdate() {
    this.loadMarkdown("../../docs/" + this.data.lan + "/" + this.data.name + ".md",(md)=>{
        this.data.html = this.md.render(md);
        this.update();
    })
}

異步的刷新組件。async

詳細的代碼能夠看這裏

Github

歡迎使用~~

相關文章
相關標籤/搜索