静态blog搭建
00|前排提示
静态博客好,问题真不少。
常见静态站点生成器有Hexo(JS)、Hugo(golang)、Jekyll(Ruby),其中Hexo最常见、主题和插件都十分丰富;Jekyll是GitHub使用的站点生成器。
01|静态站点原理
当前静态站点依赖于git仓库服务。在本地通过静态站点生成器解析标记语言写作的文档,生成站点的html、css和js文件。将生成的文件结构部署在网络中的git仓库服务,通过git仓库提供的Pages(页面)服务使用户直接访问到部署的站点文件,形成静态站点。
常用的git仓库服务有GitHub、GitLab、Coding、Gitee等,但Gitee的页面服务受限,通常不做考虑;常用的标记语言有markdown、RST等。本文使用最常用的GitHub+markdown组合。由于最新版Typora(1.0+)已经收费,推荐使用VSCode插件进行markdown书写。
02|Hexo
Hexo是nodejs的一个发行包,使用需要相应环境,参考另一篇进行配置还没填坑,这里默认读者已经配置好环境。
Hexo:6.0.0nodejs:14.16.1 pnpm:7.1.7
安装配置
使用pnpm安装,看到输出hexo版本就是成功,Windows下可能禁止了powershell脚本执行,需要在“设置-开发者选项”打开或切换为cmd执行。
pnpm install hexo
hexo v
hexo init {blog_folder_name}
cd {blog_folder_name}
pnpm install
Hexo创建的站点目录结构如下
├── _config.yml #hexo的配置文件
├── node_modules #nodejs组件库
├── package.json #npm的包管理文件
├── scaffolds #hexo的模板文件,依靠这里识别并生成站点
├── public #生成的静态文件存放地方,可以提交到GitHub
├── source #博客源文件目录,推荐使用markdown文件编写
| └── _posts #站点文件主目录,一般文章保存在这里
├── _config.{theme_name}.yml #主题的配置文件
└── themes #主题目录,下载的主题文件夹放在这里
一般只需要修改hexo配置文件、主题配置文件和站点主目录,即可完成站点的生成和发布。这里使用的是我修改后的hexo-theme-frame,可以在LiteTools文件夹下找到。
Hexo配置文件参考, 详细可以参看官方文档
title: {your_site_title}
subtitle: ''
description: ''
keywords:
author: Kyana
language: zh
url: {your_site_permanent_link} #一定要设置,不然会无法应用CSS和JS
permalink: blogs/:name.html #每个文章永久链接形式
permalink_defaults:
pretty_urls:
trailing_index: false #是否显示index
trailing_html: false #是否显示.html
theme: frame #使用什么主题
#这一块参看官方文档,一般不建议动
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
i18n_dir: :lang
code_dir: downloads/code
skip_render:
new_post_name: :title.md #新文章的名字
default_layout: post #新文章默认布局
titlecase: false #标题大小写
external_link: #点击链接在本标签打开还是新建标签
enable: true
field: site
filename_case: 0
render_drafts: false #渲染草稿
post_asset_folder: false
relative_link: false
future: true
highlight: #代码高亮设置
enable: true
line_number: true #开启行号
auto_detect: false
tab_replace: ''
wrap: true
hljs: false
index_generator:
path: ''
per_page: 10 #每页展示多少文章
order_by: -date #文章展示方式
date_format: YYYY-MM-DD
time_format: HH:mm:ss
updated_option: 'mtime'
per_page: 10
pagination_dir: page
deploy: #部署到GitHub
type: git
repo: {your_github_repo_link}
branch: {your_repo_branch}
对修改后的hexo-theme-frame设置
language: zh
stylesheets:
- /css/style.css
scripts:
- /js/frame.js
favicon: /images/favico.png #show in head
date_format: MMM D, YYYY
site_brand_name: Kyana
logo_image:
enable: false
image_path: /logo.png
profile:
title: {your_title}
body: {discription}
image: #e.g. /pic/image.jpg
links: #as you want, e.g.
Github: "{your_github_link}"
menu: #as you want, e.g.
标签: /tags/
footer:
copyright_info:
enable: true
author: {your_name}
powered_by: #powered by hexo & frame
enable: true
other_info:
enable: true
content: {your_other_content}
color_mode: default
完成设置后的工作流#
hexo new {title} #新建文章,保存在_post文件夹下
hexo new page {name} #新建页面,保存在source文件夹下
hexo s(erver) #在本地3000端口打开服务,提供站点访问,可以热重载,不生成文件
hexo deploy (hexo g(enerate)) #部署到网络中,会自动执行生成文件命令
使用中的问题
- 主题也可以使用包管理器pnpm下载,会在"node_modules"文件夹中,有时渲染失败是因为缺少主题所用配置文件的生成器,如ejs、stylus等,搜索并使用包管理器下载后重新渲染即可。
- 可以手段发布"public"文件夹中内容到git,也可以使用"hexo-deployer-git"自动部署。如果使用了自定义域名,自动部署后会无法正确解析,需要在根目录下放置"CNAME"文件,内容是自定义域名即可。
03|Hugo
Hugo是基于golang的静态站点生成器,相比Hexo该有的功能都有,主打一个快速,但因为教新,主题不是很多。
在GitHub下载hugo时,会遇到一个"hugo_extended"提供了更多功能但用不上,这次只使用最新版(v0.105.0)的基础版hugo。hugo的运行需要golang环境,由于不需要使用hugo安装额外包或者开发,只需要安装官网指引默认安装即可。
安装配置
hugo的本体和主题配置文件是写在一起的,都在根目录下的config文件,hugo默认配置文件格式是toml,但也支持yml,作者使用相对更简单明了的yml进行配置。使用的主题PaperMod可以参考的配置,Hugo可以参看官方文档。
baseUrl: {your_page_link}
title: {your_page_title}
theme: PaperMod #选择主题
copyright: {your_name}
defaultContentLanguage: zh
languageCode: zh-CN #用于head信息生成
hasCJKLanguage: true #是否有中日韩文,用于字数统计
enableEmoji: true
enableRobotsTXT: true
buildDrafts: false
buildFuture: false
buildExpired: false
disableKinds:
- RSS #不生成RSS的XML文件,减小体积
minify: #启用压缩CSS、JS
disableXML: true
minifyOutput: true
params: #主题的配置参数
author: {your_name}
defaultTheme: dark
homeInfoParams:
enable: true
Title: {your_title}
Content: {your_content}
socialIcons:
- name: {your_choose}
url: {your_link}
ShowToc: true #显示目录
TocOpen: true #目录默认打开
ShowReadingTime: true #显示估计阅读时间
ShowBreadCrumbs: true #显示当前位置
ShowPostNavLinks: true #显示上一篇和下一篇
ShowCodeCopyButtons: true #显示代码复制按钮
markup:
highlight:
style: monokai
lineNos: true
menu: #生成顶部菜单
main:
- identifier: Archives
name: 归档
url: /archives/
weight: 10 #权重越大越靠右
- identifier: Categories
name: 分类
url: /categories/
weight: 20
- identifier: Tags
name: 标签
url: /tags/
weight: 30
完成后的工作流
hugo server #使用hugo在本地提供服务,预览页面
hugo #生成静态文件到public文件夹
cd public
git init #初始化git仓库,只用做一次
git remote add origin {your_repo_link} #添加远程库,只做第一次
git add * #添加全部文件到暂存区
git commit -m "Issue new passage." #提交更改,一定要写信息,可以随便写但建议有意义方便管理
git push origin -u master/main #推送到远程库,默认推送本地master分支,GitHub使用main做新仓库默认分支名
04|Jekyll
由于是GitHub使用的生成器,只需要将markdown文件放在GitHub仓库,打开page服务并选择主题即可,参看官方文档。
主题等的配置只需要在根目录下添加"_config.yml"即可。
配置文件
theme: timemachine