从0搭建github.io网页

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

从0搭建github.io网页

文章目录

  • 从0搭建github.io网页
    • 1.成果展示
      • 1.1 网址和源码
      • 1.2 页面展示
    • 2.new对象
      • 2.1 创建仓库
    • 3.github.io仓库的初始化
      • 3.1 千里之行,始于足下
      • 3.2 _config.yml
      • 3.3 一点杂活
    • 4.PerCheung.github.io.page
      • 4.1 文件目录介绍
      • 4.2 打包替换PerCheung.github.io
    • 5.技术细节
      • 5.1 markdown文件怎么支持目录?
        • 5.1.1 修改_config.yml
        • 5.1.2 修改markdown文件
      • 5.2 搜索功能的实现

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

image-20240102224451211

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

image-20240102224613654

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

image-20240102224754616

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

2.new对象

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

2.1 创建仓库

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

image-20231226165946916

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

3.github.io仓库的初始化

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

3.1 千里之行,始于足下

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

image-20240102225942492

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

image-20240102230045475

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

<h1>PerCheung.github.io</h1>
创建自己的GitHub博客

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

3.2 _config.yml

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

image-20240102230451550

image-20231228171732435

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

# 主题设置
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文件内容。

# 标题
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下。

image-20240102231532720

4.2 打包替换PerCheung.github.io

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

image-20240102231919992

image-20240102232103882

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

image-20240102232247956

5.技术细节

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

5.1 markdown文件怎么支持目录?

5.1.1 修改_config.yml

末尾加上

markdown: kramdown
5.1.2 修改markdown文件

开头加上

* 目录
{:toc}

5.2 搜索功能的实现

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

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

package mainimport ("encoding/json""io/ioutil""path/filepath""strings"
)func main() {files, err := ioutil.ReadDir(".")if err != nil {panic(err)}var fileNames []stringfor _, 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。我用命令

go build -o toc.exe toc.go

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

json内容如下。

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

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

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

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

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

<el-inputsize="small"v-model="search"prefix-icon="el-icon-search"placeholder="搜索文章">
</el-input>
<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>
filteredToc() {return this.toc.filter(item =>!this.search || item.toLowerCase().includes(this.search.toLowerCase()));}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/316382.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx多域名部署多站点

目录 1.修改配置文件nginx.conf 2. 修改hosts文件 1.修改配置文件nginx.conf 在配置文件的 server_name 处修改成自己需要的域名&#xff0c;然后保存退出 j 查看语法是否错误&#xff0c;然后重启nginx nginx -t # 查看语法是否正确 systemctl restart nginx # 重启nginx …

ansible 配置jspgou商城上线(MySQL版)

准备环境 准备两台纯净的服务器进行&#xff0c;在实验之前我们关闭防火墙和selinux systemctl stop firewalld #关闭防火墙 setenforce 0 #临时关闭selinux hosts解析(两台服务器都要去做) [rootansible-server ~]# vim /etc/hosts 10.31.162.24 ansible-ser…

【算法】利用分治思想解算法题:快排、归并、快速选择实战(C++)

1. 分治思想 介绍 分治法将问题划分成多个相互独立且相同或类似的子问题&#xff0c;然后递归地解决每个子问题&#xff0c;并将结果合并以得到原始问题的解。 分治思想通常包含以下三个步骤&#xff1a; 分解&#xff1a;将原始问题划分成多个规模较小、相互独立且类似的子…

Gradle系列之大锅菜汇总

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

【程序员的自我修养08】精华!!!动态库的由来及其实现原理

绪论 大家好&#xff0c;欢迎来到【程序员的自我修养】专栏。正如其专栏名&#xff0c;本专栏主要分享学习《程序员的自我修养——链接、装载与库》的知识点以及结合自己的工作经验以及思考。编译原理相关知识本身就比较有难度&#xff0c;我会尽自己最大的努力&#xff0c;争…

opencv003图像裁剪(应用NumPy矩阵的切片)

这一部分相对于马上要学习的二值化是要更更更简单一些的&#xff0c;只需三行&#xff0c;便能在opencv上裁剪图像啦&#xff08;顺便云吸猫&#xff0c;太可爱了&#xff01;&#xff09; 出处见水印&#xff01; 1、复习图像的显示 前几天期末考试&#xff0c;太久没有看…

QML 中自定义虚拟键盘

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 我们知道 Qt 中虚拟键盘模块遵循的是 GPL 协议&#xff0c;是不可用于商业发布的。如果项目中使用了 Qt 自带的虚拟键盘&#xff…

maven、springboot项目编译打包本地jar、第三方jar包

0. 引言 一般我们在maven项目中都是通过引入pom坐标的形式来引入第三方jar包&#xff0c;但某些场景下&#xff0c;第三方是直接提供的jar包文件&#xff0c;这就需要我们从本地引入第三方包并进行打包。所以我们今天来看下如何进行本地引入第三方包操作 1. 步骤 1、在项目下…

JVM是如何基于虚拟机栈运行的

众所周知&#xff1a;JVM执行Java代码是靠执行引擎实现的。执行引擎有两套解释器&#xff1a;字节码解释器、模板解释器。字节码解释器比较简单&#xff0c;不多说&#xff0c;看图。本篇文章咱们讨论模板解释器执行Java代码的底层原理。 早些年研究模板解释器看到R大用汇编写的…

你知道vue中key的原理吗?说说你对它的理解

一、Key是什么 开始之前&#xff0c;我们先还原两个实际工作场景 当我们在使用v-for时&#xff0c;需要给单元加上key <ul><li v-for"item in items" :key"item.id">...</li> </ul>用new Date()生成的时间戳作为key&#xff0c…

数据中心网络架构

参考&#xff1a; 一文读懂胖树 数据中心网络架构VL2详解 数据中心网络拓扑设计目标 总体目标 业务可以部署在任意的服务器上可以根据需要动态扩展或者缩小服务器规模 网络角度 均衡负载且高性能&#xff1a;服务器之间的性能仅受限于服务器网卡&#xff0c;而不是链路性能…