[心得]在GitHub Pages上部署个人Blog

发布于 2023-12-12  17 次阅读


AI 摘要

在GitHub Pages部署个人Blog的心得:注册GitHub账号、设置Pages、安装Git与Note.js、Hexo初始化、本地预览、上传至GitHub以及修改配置等步骤。

准备工作

注册Github

  1. 首先在GitHub上注册一个账号:点击Sign up,根据提示用邮箱注册并登录,记住你的名字。
  2. 创建一个库用来存放网页代码:点击创建储存库,在箭头处输入 xxx.github.io (xxx输入你的名字),勾选上 Add a README file ,然后点击右下角的 Create repository (这里因为我已经创建过同名储存库,所以会报错,正常会显示绿色)[心得]在GitHub Pages上部署个人Blog
  3. 设置GitHub Pages:在储存库里打开 Settings => PagesBranch 里选择 main 然后 Save 就完成了这一步的操作
  4. 获取token:打开 Developer Settings ,选择 Generate new tokens => Generate new tokens(classic) ,进来页面之后 Note 随便填, Expiration 里填令牌过期时间,建议直接选择不过期(No expiration)。Select scopes 打勾 repo 然后选择 Generate token 创建令牌,之后记住令牌(ghp开头的一串字母)。[心得]在GitHub Pages上部署个人Blog

下载并安装Git和Note.js

根据自己所需要的下载对应的版本,这里建议下载最新版的x64版本。注意Note.js要安装到C盘,不然可能会出错。

Hexo初始化及上传

安装时,请保证你的网络通畅。

安装Hexo

npm install -g hexo-cli

在合适处创建文件夹,然后按住 Shift 并在空白处右键,当你安装好了Git之后会有选项 Open Git Bash here 单击进入界面输入上述代码。

你可以用 hexo -v 来检查是否成功安装。

初始化Hexo

hexo init blog
cd blog
npm install

安装完成后依次输入上述代码,创建一个项目 blog 并初始化。

本地预览

hexo g
hexo s

输入上述代码后可以在本地电脑上访问 localhost:4000 来预览你的网页。

上传至Github

在控制台输入 npm install hexo-deployer-git --save 安装 hexo-deployer-git 插件。

找到刚刚创建的 blog 文件夹下的 _config.yml 文件,用记事本打开,在最后加入以下代码。

deploy:
    type: git
    repo: https://github.com/LostSeasons/LostSeasons.github.io.git
    branch: main
    token: ghp_XXXXXXXXXXXXXXX

将里面修改为你的名字,和你刚刚获取的 token ,修改并保存后在控制台输入 hexo d 就能上传至 Github 了,然后在网页上直接访问 https://你的名字.github.io 就能看到你的博客了。

修改配置(美化)

您可以在 _config.yml 中修改大部分的配置,包括修改那丑到不能看的默认主题。

网站

设置描述
title网站标题
subtitle网站副标题
description网站描述
keywords网站的关键词。 支持多个关键词。
author您的名字
language网站使用的语言。 使用 2 个字母的 ISO-639-1 代码,或 它的变体。 默认为 en
timezone网站时区。 Hexo 默认使用您电脑的时区。 请参考 时区列表 进行设置,如 America/New_YorkJapan, 和 UTC 。 一般的,对于中国大陆地区可以使用 Asia/Shanghai

网址

设置描述默认值
url网址, 必须以 http:// 或 https:// 开头
root网站根目录url's pathname
permalink文章的 永久链接 格式:year/:month/:day/:title/
permalink_defaults永久链接中各部分的默认值
pretty_urls改写 permalink 的值来美化 URL
pretty_urls.trailing_index是否在永久链接中保留尾部的 index.html,设置为 false 时去除true
pretty_urls.trailing_html是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html无效)true

网站存放在子目录

如果您的网站存放在子目录中,例如 http://example.com/blog,则请将您的 url 设为 http://example.com/blog 并把 root 设为 /blog/

例如:

# e.g. page.permalink is http://example.com/foo/bar/index.html
pretty_urls:
trailing_index: false
# becomes http://example.com/foo/bar/

目录

设置描述默认值
source_dirSource folder. Where your content is storedsource
public_dirPublic folder. Where the static site will be generatedpublic
tag_dir标签文件夹tags
archive_dir归档文件夹archives
category_dir分类文件夹categories
code_dirInclude code 文件夹,source_dir 下的子目录downloads/code
i18n_dir国际化(i18n)文件夹:lang
skip_render匹配到的文件将会被不做改动地复制到 public 目录中。 您可使用 glob 表达式来匹配路径。

例如:

skip_render: "mypage/**/*"
# 将会直接将 `source/mypage/index.html` 和 `source/mypage/code.js` 不做改动地输出到 'public' 目录
# 你也可以用这种方法来跳过对指定文章文件的渲染
skip_render: "_posts/test-post.md"
# 这将会忽略对 'test-post.md' 的渲染

## This also can be used to exclude posts,
skip_render: "_posts/test-post.md"
# will ignore the `source/_posts/test-post.md`.

文章

设置描述默认值
new_post_name新文章的文件名称:title.md
default_layout预设布局post
titlecase把标题转换为 title casefalse
external_link在新标签中打开链接
external_link.enable在新标签中打开链接true
external_link.field对整个网站(site)生效或仅对文章(post)生效site
external_link.exclude需要排除的域名。 主域名和子域名如 www 需分别配置[]
filename_caseTransform filenames to 1 lower case; 2 upper case0
render_drafts显示草稿false
post_asset_folder启用 资源文件夹false
relative_link把链接改为与根目录的相对位址false
future显示未来的文章true
syntax_highlighter代码块的设置, 请参考 代码高亮 进行设置highlight.js
highlight代码块的设置, 请参考 Highlight.js 进行设置
prismjs代码块的设置, 请参考 PrismJS 进行设置

首页设置

设置描述默认值
index_generatorGenerate an archive of posts, powered by hexo-generator-index
index_generator.pathRoot path for your blog’s index page''
index_generator.per_pagePosts displayed per page.10
index_generator.order_byPosts order. Order by descending date (new to old) by default.-date
index_generator.pagination_dirURL format, see Pagination setting belowpage

分类 & 标签

设置描述默认值
default_category默认分类uncategorized
category_map分类别名
tag_map标签别名

例如:

category_map:
"yesterday's thoughts": yesterdays-thoughts
"C++": c-plus-plus

日期 / 时间格式

Hexo 使用 Moment.js 来解析和显示时间。

设置描述默认值
date_format日期格式YYYY-MM-DD
time_format时间格式HH:mm:ss
updated_option当 Front Matter 中没有指定 updated 时 updated 的取值mtime

updated_option

updated_option 控制了当 Front Matter 中没有指定 updated 时,updated 如何取值:

  • mtime: 使用文件的最后修改时间。 这是从 Hexo 3.0.0 开始的默认行为。
  • date: 使用 date 作为 updated 的值。 可被用于 Git 工作流之中,因为使用 Git 管理站点时,文件的最后修改日期常常会发生改变
  • empty: 直接删除 updated。 使用这一选项可能会导致大部分主题和插件无法正常工作。

use_date_for_updated 选项已经在 v7.0.0+ 中被移除。 请改为使用 updated_option: 'date'

分页

设置描述参数
per_page每页显示的帖子数。 0 关闭分页功能10
pagination_dirURL formatpage

例如:

pagination_dir: 'page'
# http://example.com/page/2

pagination_dir: 'awesome-page'
# http://example.com/awesome-page/2

扩展

设置描述
theme当前主题名称。 值为false时禁用主题
theme_config主题的配置文件。 在这里放置的配置会覆盖主题目录下的 _config.yml 中的配置
deploy部署部分的设置
meta_generatorMeta generator 标签。 值为 false 时 Hexo 不会在头部插入该标签

包括或不包括目录和文件

使用以下选项可明确处理或忽略某些文件/文件夹。 可以使用 glob 表达式 进行路径匹配。

include 和 exclude 选项只会应用到 source/ ,而 ignore 选项会应用到所有文件夹.

设置描述
include包含隐藏文件(包括名称以下划线开头的文件/文件夹,* 除外)
exclude排除文件或文件夹
ignore忽略文件/文件夹

例如:

# 处理或不处理目录或文件
include:
- ".nojekyll"
# 处理 'source/css/_typing.css'
- "css/_typing.css"
# 处理 'source/_css/' 中的任何文件,但不包括子目录及其其中的文件。
- "_css/*"
# 处理 'source/_css/' 中的任何文件和子目录下的任何文件。
- "_css/**/*"

exclude:
# 不处理 'source/js/test.js'。
- "js/test.js"
# 不处理 'source/js/' 中的文件、但包括子目录下的所有目录和文件。
- "js/*"
# 不处理 'source/js/' 中的文件和子目录下的任何文件。
- "js/**/*"
# 不处理 'source/js/' 目录下的所有文件名以 'test' 开头的文件,但包括其它文件和子目录下的单文件。
- "js/test*"
# 不处理 'source/js/' 及其子目录中任何以 'test' 开头的文件。
- "js/**/test*"
# 不要用 exclude 来忽略 'source/_posts/' 中的文件。
# 你应该使用 'skip_render'。 或者在要忽略的文件的文件名之前加一个下划线 '_'。
# - "_posts/hello-world.md" # 在这里配置是没有用的。

ignore:
# 忽略任何一个名叫 'foo' 的文件夹。
- "**/foo"
# 只忽略 'themes/' 下的 'foo' 文件夹。
- "**/themes/*/foo"
# 对 'themes/' 目录下的每个文件夹中忽略名叫 'foo' 的子文件夹。
- "**/themes/**/foo"

列表中的每一项都必须用单引号或双引号包裹起来。

include 和 exclude 并不适用于 themes/ 目录下的文件。 如果需要忽略 themes/ 目录下的部分文件或文件夹,可以使用 ignore 或在文件名之前添加下划线 _

source/_posts 文件夹是一个例外,但该文件夹下任何名称以 _ 开头的文件或文件夹仍会被忽略。 不建议在该文件夹中使用 include 规则。

使用代替配置文件

可以在 hexo-cli 中使用 --config 参数来指定自定义配置文件的路径。 你可以使用一个 YAML 或 JSON 文件的路径,也可以使用逗号分隔(无空格)的多个 YAML 或 JSON 文件的路径。

# use 'custom.yml' in place of '_config.yml'
$ hexo server --config custom.yml

# use 'custom.yml' & 'custom2.json', prioritizing 'custom2.json'
$ hexo server --config custom.yml,custom2.json

当你指定了多个配置文件以后,Hexo 会按顺序将这部分配置文件合并成一个 _multiconfig.yml。 后面的值优先。 这个原则适用于任意数量、任意深度的 YAML 和 JSON 文件。 请注意,列表中不允许有空格

如果 custom.yml 中指定了 foo: bar,在 custom2.json 中指定了 "foo": "dinosaur",那么在 _multiconfig.yml 中你会得到 foo: dinosaur

使用代替主题配置文件

通常情况下,Hexo 主题是一个独立的项目,并拥有一个独立的 _config.yml 配置文件。

除了自行维护独立的主题配置文件,你也可以在其它地方对主题进行配置。

配置文件中的 theme_config

该特性自 Hexo 2.8.2 起提供

# _config.yml
theme: "my-theme"
theme_config:
bio: "My awesome bio"
foo:
bar: "a"
# themes/my-theme/_config.yml
bio: "Some generic bio"
logo: "a-cool-image.png"
foo:
baz: 'b'

最终主题配置的输出是:

{
"bio": "My awesome bio",
"logo": "a-cool-image.png",
"foo": {
"bar": "a",
"baz": "b"
}
}

独立的 _config.[theme].yml 文件

该特性自 Hexo 5.0.0 起提供

独立的主题配置文件应放置于站点根目录下,支持 yml 或 json 格式。 需要配置站点 _config.yml 文件中的 theme 以供 Hexo 寻找 _config.[theme].yml 文件。

# _config.yml
theme: "my-theme"
# _config.my-theme.yml
bio: "My awesome bio"
foo:
bar: "a"
# themes/my-theme/_config.yml
bio: "Some generic bio"
logo: "a-cool-image.png"
foo:
baz: 'b'

最终主题配置的输出是:

{
"bio": "My awesome bio",
"logo": "a-cool-image.png",
"foo": {
"bar": "a",
"baz": "b"
}
}

我们强烈建议你将所有的主题配置集中在一处。 如果你不得不在多处配置你的主题,那么这些信息对你将会非常有用:Hexo 在合并主题配置时,Hexo 配置文件中的 theme_config 的优先级最高,其次是 _config.[theme].yml 文件。 最后是位于主题目录下的 _config.yml 文件。