搭建基于 Github Pages 的简单博客

基本思路:

  1. Github Pages 实现网页预览 => 2. Markdown 文件自动转换为可视网页 => 3. 自动创建文章目录

Github Pages 实现网页预览

1. 新建一个 git 仓库

新建仓库:



新建仓库

添加 README 文件:


添加 README文件

提交README文件

仓库新建完成

2. 新建 index.html 文件并提交

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Marked in the browser</title>
</head>
<body>
<h1> this is index.html</h1>
</body>
</html>

3. GitHub Pages 设置

进入 Settings:



GitHub Pages 的 Source 选项下,选择 master branch 并保存:




设置完成页面刷新后,打开 GitHub Pages 的 Source 选项下的网址则默认打开 index.html:


将 Markdown 格式的内容转换为 HTML 元素

1. 新建 template.html

此处,使用 marked 插件,可将用 Markdown 语法写的内容转换为 HTML 元素。

<!doctype html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>template</title>
  <script src="https://cdn.bootcss.com/marked/0.3.17/marked.min.js"></script>
</head>
<body>
<div id="content">
# template content
## by me  
</div>
  <script>
    let content = document.getElementById('content');
    let markdown = content.innerHTML;
    let newMarkdown = HTMLDecode(markdown);
    let html = marked(newMarkdown);
    content.innerHTML = html;    
    
    //特殊字符在获取 innerHTML 时,会被转换为转义字符,影响 Markdown 内容转换,此处反转回来。 &gt对应 > 
    function HTMLDecode(text) { 
      return text.replace(/&gt;/g, '>')
    }
  </script>
</body>
</html>
2. 再次点击 Settings 进入网页,在网址后加入/template,即可预览 template.html 网页,效果如下:

下载并安装 Node.js

使用 Node.js,首先要安装 Node 环境。
官网下载:https://nodejs.org/en/ / http://nodejs.cn/download/
安装时,要勾选 Add to Path,则 node 环境变量会被自动添加。
安装完成后,验证是否安装成功:打开命令行,输入 node -v ,安装正常,则会在下行输出 node 版本号,如:v8.9.1
至此,安装成功。


将 Markdown 文档转换为直接展示 Markdown 内容的 html 文件

思路:将第3步中 template.html 文件中 div 内的内容替换为 要展示的 Markdown 文档内容,即可。
此处,利用 Node.js 的文件读写功能。
点击 查看Node 文档

1. 将仓库内容克隆到本地
2. 在本地新建 transform.js 文件,内容如下:
console.log('this is transform.js');
3. 命令行执行 node transform.js,则命令行会打印出 'this is transform.js',说明 transform.js 文件已执行。
4. 根目录新建 list 文件夹,用来存放 Markdown 文件。

并新建 article1.md、article.md 内容如下:

# this is article1
## by me
# this is article2
## by me
5. 修改 template.html 文件,删除 div 内内容,改为占位符 %content%,删除 <script> 中的转换内容,放到 transform.js 内处理 :
<div id="content">%content%</div>
6. 安装 marked 依赖:

执行 npm install marked --save

7. 修改 transform.js 文件如下:
const fs = require('fs');
const path = require('path');
const marked = require('marked');

fs.readdir('./list', function (error, files) {
    files.forEach( file=>{
        let p = path.join('./list', file);
        let markdown = fs.readFileSync(p).toString();
        let html = marked(markdown);
        let template = fs.readFileSync('./template.html').toString();
        let result = template.replace('%content%', html);
        fs.writeFileSync(file+'.html', result);
    })
});
8. 再次执行 node transform.js,则会在根目录生成 article1.md.html 和 article2.md.html 文件,打开文件预览如下:
article1

article2

至此,可通过执行 transform.js 文件生成 Markdown 文档对应的 html 文件。


6.将 index.html 作为博客入口文件,自动生成博客目录。

思路:利用 Node.js 操作 DOM,此处要用到 cheerio 插件,进行 DOM 操作。

1. 命令行执行 npm init 生成 package.json 文件,再执行 npm install cheerio ,安装 cheerio。
2. 修改 index.html 文件如下:
<!DOCTYPE html><html><head>
    <meta charset="utf-8">
    <title>Marked in the browser</title>
</head>
<body>
<div id="content"></div>
</body></html>
3. 修改 transform.js 文件如下:
const fs = require('fs');
const path = require('path');
const cheerio = require('cheerio');
const marked = require('marked');
const baseUrl = 'https://hitsuoyue.github.io/gegezhan/';
let list = [];

fs.readdir('./list', function (error, files) {
    files.forEach( file=>{
        let p = path.join('./list', file);
        let markdown = fs.readFileSync(p).toString();
        let html = marked(markdown);
        let template = fs.readFileSync('./template.html').toString();
        let result = template.replace('%content%', html);
        fs.writeFileSync(file+'.html', result);
    })
});

fs.readdir('./', function (error, files) {
    files.forEach(file=>{
        if(file.substring(file.length-7, file.length) === 'md.html'){
            list.push(file);
        }
    })
    modifyList();
});

function modifyList() {
    let content = fs.readFileSync('./index.html');
    $ = cheerio.load(content);
    let dom = $('#content');
    dom.empty();
    let ul = `<ul class="container"></ul>`;
    dom.append(ul);
    let container = $('.container');


    list.forEach((item,index)=>{
        let url = `${baseUrl}${item}`;
        let title = item.substring(0, item.length-8);
        let li = `<li><a href=${url}>${index+1}. ${title}</a></li>\n`;
        container.append(li);
    });

    fs.writeFile('./index.html', $.html());
}
4. 执行 node transform.js,则 index.html 文件被改变,打开预览效果如下:
index.html

至此,可自动生成文章目录。


将代码提交到 github 仓库上。

git add .
git commit -m blog
git push

通过以上步骤就可利用 Github Pages 简单创建一个博客啦~
你可根据需要添加自己的样式~~~


注:代码中涉及到 github 地址的请替换为自己的 github 地址;
源代码地址:https://hitsuoyue.github.io/gegezhan/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容