从0搭建github.io网页

点击跳转到🔗我的博客文章目录

从0搭建github.io网页

文章目录

1.成果展示

在我的理解里,github.io,不是博客,这是服务器,他是一个可以在路径https://percheung.github.io/下存放一切的增强版nginx服务器。这篇博客我会讲很多东西,从0讲到我搭建完成。

1.1 网址和源码

本项目用vue搭建。

我的博客网址为🔗https://percheung.github.io

博客的源码仓库网址为https://github.com/PerCheung/PerCheung.github.io

搭建源码页面的仓库网址为https://github.com/PerCheung/PerCheung.github.io.page

1.2 页面展示

主页 index

从上到下有什么功能就不讲了,点击第二个蓝色文件夹图标,进入博客。搜索框支持查找博客内容。

点击即可进去查看文章,这个github.io最棒的地方就是它对markdown文档的在线阅读支持。

下面开始讲讲我如何搭建起这个主页的。

2.new对象

我就默认你已经有GitHub账户了。面向对象编程来说,第一步当然是创造对象,下面将github.io仓库的创建。

2.1 创建仓库

进入https://github.com/new,如图。新建仓库{你的GitHub账户名}.github.io,记得勾选public。

就这么简答,你已经获得了链接为{你的GitHub账户名}.github.io的主页,属于你!

3.github.io仓库的初始化

我不知道大家创建仓库后,仓库内容是什么样的,我一开始仓库里一无所有。然后在网上搜,网上还有很多教你用Hexo帮你搭建起github.io的教程,但是我一开始搭建它的时候没有选择这条路,因为太相似了,而且真的搭建成博客了。在我看来他不应该只是一个博客,只能放点文章?这太大材小用了。如果只是为了写博客,我为什么不用CSDN呢?

3.1 千里之行,始于足下

好了,下面我要从0开始了,这里什么都没有,是空的。

最开始,我只建了一个README.md

然后我跳转我自己的主页https://percheung.github.io,我发现,页面上有两行字

html 复制代码
<h1>PerCheung.github.io</h1>
创建自己的GitHub博客

是的,README.md居然能被当作网页访问!但我们仅仅有.md文件可不够,md的语法不如html丰富,如果我想要页面更漂亮呢?想要页面能支持博客搜索呢?

3.2 _config.yml

我查找资料后知道,_config.yml无疑是这个项目最最重要的文件了。但仓库一开始并没有这个文件怎么办呢?答案:新建。(第一张图请忽略,因为我搭建完项目才开始写这篇博客,一开始这几乎里是空白,除了一开始我建了一个README.md

加上这一句后,你再访问你自己的主页,你会发现页面变成蓝色风格了。现在官方具备如下主题。

yaml 复制代码
# 主题设置
theme: jekyll-theme-architect
theme: jekyll-theme-cayman
theme: jekyll-theme-dinky
theme: jekyll-theme-hacker
theme: jekyll-theme-leap-day
theme: jekyll-theme-merlot
theme: jekyll-theme-midnight
theme: minima
theme: jekyll-theme-minimal
theme: jekyll-theme-modernist
theme: jekyll-theme-slate
theme: jekyll-theme-tactile
theme: jekyll-theme-time-machine

最新的主题有什么具体可以参考GitHub主题页面

设置好后,你项目里的markdown文件就会随着主题的变化而变化。这里也可以什么主题都不选,那么会有一个默认的主题。

这是我目前_config.yml文件内容。

yaml 复制代码
# 标题
title: 鸿雁长飞光不度,鱼龙潜跃水成文
# 描述
description: This is my blog
# 主题风格
theme: jekyll-theme-primer
# markdown增强功能
markdown: kramdown

前三个很好理解了,看注释就知道是什么,title是主页的名字,description类似于每个人的qq签名。最后一句markdown: kramdown写上,会支持markdown目录功能等。

3.3 一点杂活

继续加文件。加.gitignore,加LICENSE

4.PerCheung.github.io.page

下面开始用vue画页面,仓库地址在PerCheung.github.io.page

4.1 文件目录介绍

我将PerCheung.github.io里的文件都放在vue项目的public下了,比如各个建的.gitignoreLICENSE_config.ymlREADME.md,然后我将我的博客文章放到了public/blog下,将博客文章引用的图片放到public/blogImg下。

4.2 打包替换PerCheung.github.io

用项目里的README.md文件中的打包指令会打一个dist文件夹。

dist的内容替换掉PerCheung.github.io里所有的内容即可。

5.技术细节

github.io开源项目,是基于jekyll,绕不开。

5.1 markdown文件怎么支持目录?

5.1.1 修改_config.yml

末尾加上

yaml 复制代码
markdown: kramdown
5.1.2 修改markdown文件

开头加上

markdown 复制代码
* 目录
{:toc}

5.2 搜索功能的实现

这个项目我没用后端的,执意纯前端来实现。我的方法如下。

在文件夹public/blog下,写了一个go文件,文件名叫toc.go,代码如下

go 复制代码
package main

import (
	"encoding/json"
	"io/ioutil"
	"path/filepath"
	"strings"
)

func main() {
	files, err := ioutil.ReadDir(".")
	if err != nil {
		panic(err)
	}

	var fileNames []string
	for _, file := range files {
		if file.IsDir() {
			continue
		}
		name := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name()))
		if name != "toc" {
			fileNames = append(fileNames, name)
		}
	}

	jsonData, err := json.Marshal(fileNames)
	if err != nil {
		panic(err)
	}

	err = ioutil.WriteFile("toc.json", jsonData, 0644)
	if err != nil {
		panic(err)
	}
}

这个代码会将同级目录的文件统计出来,去掉文件后缀,转成一个toc.json。我用命令

bash 复制代码
go build -o toc.exe toc.go

将go代码打成了exe文件,然后就把go代码删掉了,然后双击执行toc.exe会产生toc.json。

json内容如下。

json 复制代码
["HTML5学习记录","markdown各种语法测试","初步领悟C指针","卓别林的演讲","如何搭建github.io网页","搭建多人聊天室(保姆级教学,从0开始)","正则表达式笔记"]

这个json是一个字符串数组,内容就是markdown文件名。

然后把他放到vue项目的src/views/TOC.vue里,内容在

js 复制代码
data() {
    return {
      search: '',
      toc: ["HTML5学习记录", "markdown各种语法测试", "初步领悟C指针", "卓别林的演讲", "如何搭建github.io网页", "搭建多人聊天室(保姆级教学,从0开始)", "正则表达式笔记"]
    };
  }

然后借助搜索框,用search对toc循环出的item做筛选,就实现了搜索功能。

html 复制代码
<el-input
            size="small"
            v-model="search"
            prefix-icon="el-icon-search"
            placeholder="搜索文章">
</el-input>
html 复制代码
<div class="custom_card" v-for="item in filteredToc" :key="item">
          <el-link :href="getLink(item)"
                   :underline="false"
                   target="_blank">
            <i class="el-icon-paperclip"></i>
            {{ item }}
          </el-link>
</div>
js 复制代码
filteredToc() {
      return this.toc.filter(item =>
          !this.search || item.toLowerCase().includes(this.search.toLowerCase())
      );
    }

至此,不讲了。博客的搭建是需要自己钻研学习的,更加细枝末节的地方我想不到还有什么好讲的,只能在实际操作中,自己掌握吧。

相关推荐
草梅友仁8 分钟前
草梅 Auth 1.1.0 发布与最新动态 | 2025 年第 30 周草梅周报
开源·github·ai编程
mortimer1 小时前
安装NVIDIA Parakeet时,我遇到的两个Pip“小插曲”
python·github
心之语歌4 小时前
Spring AI MCP 客户端
人工智能·spring·github
yeshan3337 小时前
使用 Claude Code 的自定义 Sub Agent 完善博文写作体验
ai·github·agent·claudecode
程序视点7 小时前
望言OCR 2025终极评测:免费版VS专业版全方位对比(含免费下载)
前端·后端·github
玩个冰球8 小时前
Stata 18下载安装教程(非常详细),看完这一篇就够了(附安装包)
github
Xi_Xu8 小时前
Xget:下一代开源资源获取加速引擎,让你的文件下载、储存库克隆和镜像拉取快如闪电
开源·github
用户40993225021210 小时前
FastAPI的查询白名单和安全沙箱机制如何确保你的API坚不可摧?
前端·后端·github
计算机毕设定制辅导-无忧学长13 小时前
InfluxDB Flux 查询协议实战应用(二)
github
黄团团17 小时前
SpringBoot连接Sftp服务器实现文件上传/下载(亲测可用)
服务器·spring boot·github