Omi應用md2site-0.5.0釋出-支援動態markdown拉取解析

【當耐特】發表於2017-03-15

寫在前面

Md2site是基於Omi的一款Markdown轉網站工具,使用簡單,生成的檔案輕巧,功能強大。

在使用之前的版本的時候,你會發現體驗非常好?為什麼非常好?因為頁面間的切換是無重新整理!
無重新整理的原理就是,所有的markdown都會被webpack打包到js裡,只要在js動態require就行。

這樣帶來的一個問題便是:如果有海量的markdown的時候,首次載入的時間非常長。

怎麼解決?支援動態拉取和解析markdown~~

使用姿勢

$ npm install md2site -g
$ md2site init your_project_name
$ cd your_project_name
$ npm run dev
$ npm run dist

所有命令都是和以前一樣的。接下來,開啟project.js:

module.exports = {
    cdn : '',
    async: true
}
  • 你把async改成true就代表會生成一個非同步拉取和解析markdown的網站
  • 你把async改成false就代表會生成一個完全無重新整理的網站

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

原理解析

防止webpack打包markdown

當我們設定async為true的時候,不是希望webpack把markdown打包入js裡的,所以在webpack config做了如下操作:

var proj_config = require('./project.js');
if(proj_config.async) {
    config.module.loaders[3].exclude =  /\.md$/;
}

其中config.module.loaders[3]就是配置的markdown loader。exclude就代表把相關的正則匹配到的檔案直接給無視掉。

動態載入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();
    })
}

非同步的重新整理元件。

詳細的程式碼可以看這裡

Github

歡迎使用~~

相關文章