如何在 GitHub Pages 上搭建 Hexo 博客的同时部署静态项目 / 在线跑本地demo

291 阅读3分钟

这是我参与 11 月更文挑战的第 3 天,活动详情查看:2021最后一次更文挑战

解决办法

Hexo 项目内有个 public 文件夹,这个文件夹内的文件结构跟 hexo ghexo d 编译部署到 GitHub 仓库之后的目录结构是一样的

如果在 public 下新建个 demo (名字随便取) 文件夹,把静态项目(假如是 demo.html )塞进去,就可以通过 username.github.io/demo/demo.html 直接访问这个静态项目了

如果要究其原因,请继续往下看

原理

前几天终于把拖了好久的博客搭出来了

部署: GitHub Pages ( GitHub 提供的一项服务,通过它可以在线上部署静态项目 )

框架: Hexo ( 博客内容管理框架,你只负责写 md ,它帮你生成页面,而且有丰富的主题可供选择 )

主题: NexT

这套搭配的搭建教程已有很多,这里就不班门弄斧了

我本来是想把自己写的一些游戏之类的静态项目通过 GitHub Pages 部署到线上,现在博客占住了入口,怎么同时部署博客和这些静态项目呢

首先来看看 GitHub Pages 是怎么把我们的静态代码部署到线上的

GitHub Pages 的原理

通常来说,我们想要通过输入网址,现实访问一个静态项目,需要以下条件:

  • 项目代码本身(比如 index.html)

  • 存放代码的能够线上访问得到的仓库

  • 作为访问入口的域名

GitHub Pages 为我们提供了后面两个条件的支持

仓库

众所周知 GitHub 本身就是线上代码仓库

GitHub Pages 和 GitHub 通过约定,在把 GitHub 中名为 username.github.io ( username 是 GitHub 账户的用户名 )的仓库作为 GitHub Pages 指定仓库

域名

在 GitHub 上按 GitHub Pages 的要求( 详见 官网 )建立好指定仓库后,就可以通过 username.github.io 来访问该仓库了

直接访问 username.github.io 的话会相当于访问仓库的根目录,所以如果根目录下有 index.html 是会直接打开的( Hexo 就是利用了这一点 )

Hexo

Hexo 主要做了以下几件事:

  • 提供博客的结构框架、主题、模板等

  • 编译整个博客项目

  • 提供一些附属功能的接口,比如流量统计、评论之类的

按照 官网文档 创建好项目之后,目录结构如下:

.
├── _config.yml
├── package.json
├── scaffolds
├── source (文章的 md 文件)
└── themes

创建文章、hexo g 编译生成、hexo d 部署到 GitHub 仓库之后的目录结构如下:

.
├── 2021/11/09/hello-world (按年月日分的文章页面)
├── archives(归档页面)
├── css
├── fancybox(静态 js 库)
├── js
└── index.html

可以看到,二者的目录结构并不相同,也就是说如果我们直接在 hexo 项目里面塞静态项目是不会被编译进生成的文件中的,也就是说在 GitHub 的仓库中不会有,自然也就无法线上访问的到了

所以现在的问题变成了,找到 hexo 项目中不会被编译的文件夹

通过测试,hexo 项目在第一次 hexo g 生成之后,项目内会多一个 public 文件夹,这个目录是不会被编译而直接塞进 GitHub 仓库根目录里面的,也就是说我们把静态项目都塞这里面,目的就达成了

我在里面塞了个原生 js 写的扫雷,感兴趣的可以玩玩:扫雷链接