博客创建记录
今天发现新浪博客几乎已经是强弩之末了,加之学校不少人有创建类似的博客,于是心血来潮自己搭一个。
主要基于“简书”上的有关教程和另一个博客网站所有者的教程操作。
GitHub
首先生成了一个名为k-pk66.github.io
的库。这个库的名称是GitHub账号的用户名。生成之后将主Branch更名为master
,并通过Settings>Pages>Build and Deployment
将Branch设定为了master
。
终端(Terminal)
通过homebrew为macOS安装git和nvm。后者是Nodejs版本管理器,可以轻松切换Nodejs版本。
1 | brew install git |
之后运用nvm
安装Node.js。
1 | nvm install 4 |
随后通过npm
安装hexo。
1 | sudo npm install hexo-cli -g |
在此之后,创建名为k-pk66.github.io
的文件夹并通过命令行打开。
1 | hexo init k-pk66.github.io |
文件夹中有名为_config.yml
的配置文件;将该文件中的各键值对按官方提供的指引文档进行修改即可。由于设定的博客位于GitHub,因此需要对文件中的“部署(deploy
)”区域进行如下设置。
1 | deploy: |
文件夹所属sources
文件夹的_post
中有参考性质的Markdown文件。通过下方指令
1 | hexo new "makeRecord" |
创建新的博客。
(更多撰写指引,请看这里)
之后通过指令
1 | hexo s |
对博客网页在本地进行测试。
随后通过指令
1 | npm install hexo-deployer-git --save |
安装自动部署发布工具。此后,每次更新博客只要输入指令
1 | hexo clean && hexo g && hexo d |
即可完成上传。
GitHub的身份验证
在首次输入上一章节的最后一个指令时命令行会引导输入GitHub账密。用户名与GitHub一致即可;当输入密码与正常登录所使用的密码一致时命令行将报错。
报错信息为“GitHub自2021年8月13日起不再支持密码认证”;因此需要通过GitHub账户个人设置中的开发者设置生成权限密钥(Personal access tokens)。在生成之后将输入密码替代为此token,即可完成上传。
主题
在本博客发布为止博客使用的是butterfly主题。
在文件夹k-pk66.github.io
的终端输入
1 | git clone -b master https://gitee.com/immyw/hexo-theme-butterfly.git themes/butterfly-former |
安装完成后themes
文件夹即新增了butterfly主题的一部分文件。随后输入
1 | npm install hexo-renderer-pug hexo-renderer-stylus --save |
安装渲染器等插件。最后在_config.yml
文件中修改theme
键值为butterfly
,再进行测试即可查看效果。
其他功能
新增其他语言
本章节将会对在butterfly主题中新增其他非中文语言的版本页面进行引导。
本章节参考:Shannon Hung有关内容的博客
使用_config.yml
复制出config-zh.yml
与config-en.yml
两文件,随后删除原本的_config.yml
。之后分别对两语言的.yml
文件指定区域修改如下:
1 | # config-en.yml |
1 | # config-zh.yml |
之后在原本中文文件夹source
中新建文件夹self
,随后创写文件btf.js
。
1 | (() => { |
随后复制source
,粘贴在根目录下并将其命名为source-en
作为存储英文页面的文件夹。此时btf.js
应当也在source-en/self
中。
之后将_config.butterfly.yml
分身为config-butterfly-en.yml
和config-butterfly-zh.yml
。在这两个文件的底部分别添加btf.js
。
1 | # config-butterfly-former-zh.yml |
1 | # config-butterfly-former-en.yml |
相信此时读者已经看出来了——所有在英文页面配置文件中的文件路径都需要在原本的路径的前方新增/en/
。这是因为,本质上这两个页面互不相通;添加/en/
才能使文档正常调用。
之后在package.json
中调整"scripts"
中的指令表,使命令行可以产生public-en
文件夹——如此才能将英文页面推入仓库并予部署。
1 | "scripts": { |
最后新建deploy.sh
文件对命令行的指令功能进行调整。本质上,这一文件会将两个不同语言的config
、config-butterfly
文件分别视作两个_config.yml
和_config.butterfly.yml
并分别进行部署或显示。
1 |
|
之后将该文件通过命令行设为可执行文件。
1 | chmod +x deploy.sh |
此后,只要输入指令
1 | ./deploy.sh d all |
即可将所有语言均予部署。
TikZ支持
通过指令
1 | npm install hexo-filter-tikzjax |
实现对TiKz包的安装。这个包将支持把TikZ代码渲染为SVG矢量图;只需要在每篇文章的Front matters
区域输入tikzjax: true
即可。
详细操作可以通过这里寻得。
Troubleshoot
后续在实际撰稿过程中遇到了一些问题,在这里列举。
过大文件
由于GitHub本身对上传的单个文件空间大小有要求(不得超过100MB),因此不建议上传视频。
如误上传了超过100MB的文件,命令行会在push时返回信息
1 | remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com. |
在稿件中对应位置移除该大文件后push,依然会有此报错。解决此问题,需要在.deploy_git
文件夹中打开命令行,输入指令
1 | git log |
通过回车寻找上传大文件前的最后一个版本(可以根据时间找;也可以是更早的版本),复制这一版本对应commit
后方的版本号。
假定命令行有输出
1 | commit 6657f1c73af4254557e77c3dd2c681ddf10e5d51 (HEAD -> master) |
想要恢复至2024年6月3日东八区时间1时28分30秒的版本,则需要用指令
1 | git reset 35a21f2e94c5022503cfbce29ff2dacf2b497cd2 |
将.deploy_git
恢复至当时。然后再进行推送即可恢复正常。
字体
通过在主题文件夹中的source
文件夹中新建fonts
文件夹,并向其中放入字体ttf
(或otf
,woff
等)扩展名的字体文件。随后在主题文件夹中css
文件夹新建css
文件并向其中引入该字体。
以向本博客引入字体“A-OTF Shin Go Pro Regular”,并将其命名为“A-OTF Shin Go Pro R”为例。将名为AOTFShinGoProRegular.woff
的字体文件放入fonts
文件夹,随后在css
文件夹中新建my.css
并编写如下:
1 | @font-face { |
之后在主题_config.yml
文件中指定板块写如下代码
1 | # Inject |
即可。
特别地,如果仅想对特定的字母/符号使用该字体,可使用在线字体提取工具(例如这个工具)对指定字符的该字体进行提取并重新包装为新字体文件,按上述方法安装。
上传过程中遭遇卡顿(仅限中国大陆地区)
由于GitHub在中国大陆地区的访问过程中已经收到严重的DNS污染,不可避免地会出现在使用上传博客指令后无法连接GitHub服务器(或上传过程中断开连接)的情况。针对此可灵活使用中国大陆访问较快的Gitee进行操作。
由于Gitee Pages在2022年左右起已经停止服务,所以此处不推荐直接在Gitee上建立仓库的手段。
首先建立一个Gitee账号并创建仓库。之后在该仓库“管理/仓库镜像管理”中设置GitHub的仓库作为Gitee仓库的镜像,并设置方向为由Gitee仓库Push到GitHub仓库。随后在GitHub个人设置中使用先前“GitHub的身份验证”章节提到的方法生成权限密钥之后在指定位置输入;在完成添加镜像后,将_config.yml
指定位置修改如下:
1 | deploy: |
再输入博客上传指令,命令行将会在Gitee的仓库中更新博客;而仓库更新后会自动将更改写入GitHub。这时可以明显感觉到上传的速度增快了。