前言

突然想起来要好好整理一下自己的博客空间,已经荒废很多年,如果再不捡起来,等到自己知识老化的时候再去写东西就没人看了。

使用Github Pages + Jekyll把博客发布为静态网站,给人感觉比较私密,似乎所有的控制权都抓在自己手里的样子。 但是作为一个技术博客,如果写东西没有PlantUML的加持,当然效率就会差很多。

本文内容记录了断断续续将近一周的折腾。

PlantUML 插件

目前支持 PlantUML 的插件我找到了好几个,但是最终使用的是 kramdown-plantuml,另外一个 jekyll-spaceship 插件支持更多的功能, 如果需要安装的话,只需要装任意一个就可以支持 PlantUML 了,不需要两个都装。 但是从我的实践来看,jekyll-spaceship 插件生成 PlantUML图形会直接生成引用 plantuml.com 的生成功能,我觉得还是不可接受的。 人家是免费提供给你使用,作为一个静态网站,你一遍遍让人家帮你生成图形干嘛?不地道!所以我推荐 kramdown-plantuml,没那么多功能,但是规矩。

安装

安装两个插件的功能的方法如下,各位看官可以择一个安装:

1. 修改根目录下的 Gemfile,找到group :jekyll_plugins do位置,在其中加入所需的两个插件:

gem 'kramdown-plantuml'

group :jekyll_plugins do
gem "jekyll-feed", "~> 0.12"
# gem 'jekyll-spaceship'
end

2. 在 _config.yml 中找到 plugins: 位置,并加入两个插件

plugins:
- "jekyll-paginate"
- "kramdown-plantuml"
# - "jekyll-spaceship"

3. 继续在 _config.yml 中加入两个插件的配置项

jekyll-spaceship:
# default enabled processors
processors:
- table-processor
- mathjax-processor
- plantuml-processor
- mermaid-processor
- polyfill-processor
- media-processor
- emoji-processor
- element-processor
mathjax-processor:
src:
- https://polyfill.io/v3/polyfill.min.js?features=es6
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
config:
tex:
inlineMath:
- ['$','$']
- ['\(','\)']
displayMath:
- ['$$','$$']
- ['\[','\]']
svg:
fontCache: 'global'
optimize: # optimization on building stage to check and add mathjax scripts
enabled: true # value `false` for adding to all pages
include: [] # include patterns for math expressions checking (regexp)
exclude: [] # exclude patterns for math expressions checking (regexp)
plantuml-processor:
mode: default # mode value 'pre-fetch' for fetching image at building stage
css:
class: plantuml
syntax:
code: 'plantuml!'
custom: ['@startuml', '@enduml']
src: http://www.plantuml.com/plantuml/svg/
mermaid-processor:
mode: default # mode value 'pre-fetch' for fetching image at building stage
css:
class: mermaid
syntax:
code: 'mermaid!'
custom: ['@startmermaid', '@endmermaid']
config:
theme: default
src: https://mermaid.ink/svg/
media-processor:
default:
id: 'media-{id}'
class: 'media'
width: '100%'
height: 350
frameborder: 0
style: 'max-width: 600px; outline: none;'
allow: 'encrypted-media; picture-in-picture'
emoji-processor:
css:
class: emoji
src: https://github.githubassets.com/images/icons/emoji/

这里也要吐槽 jekyll-spaceship,上面这段原文里的 @startuml 这种标注直接给我解析成了它要识别的指令,加任何折衷都不行。 这也是最终被我抛弃的原因之一。

4. 启动命令行,在git工程目录运行命令 bundle install 下载并安装插件。

如果运行的时候出现类似错误 Warning: the fonts "Times" and "Times" are not available for the Java logical font,表示电脑中缺少字体。 尤其是Mac电脑,请到这里下载并安装字体。

使用插件

在 markdown 中使用 PlantUML 插件的方法也很简单,使用如下源代码形式即可:

```plantuml
a --> b
```

要注意,使用 jekyll-spaceship 插件的时候,默认的代码块名称加了一个! ,需要手工把上面配置项 code: 'plantuml!' 去掉感叹号。

静态网站生成

静态网站方案

静态网站的最终方案是使用分支进行区分,master 分支存放博客的源代码, gh-pages 分支存放生成的 _site 目录中的内容。 如果尚未创建 gh-pages 分支,可以用如下的方法创建:

mkdir gh-pages
cd gh-pages
git checkout --orphan gh-pages
git rm -rf ../gh-pages
git commit --allow-empty -m "initial commit"
git push origin gh-pages

Github Pages默认假设 gh-pages 分支中存放的是 jekyll 格式的源码,会自动构建之。为了阻止自动构建,需要在 gh-pages 分支的根目录中 存放一个 .nojekyll 文件。

为了确保工作的自动化,我在磁盘上放置了两个文件夹,一个是 blog-master 存放源代码,并和 master分支关联,一个是 gh-pages 用来存放输出的静态网页, 并和 gh-pages 分支关联。这样两个可以互不干扰。

git repositorymastergh-pages作者jekyllblog siteblog mastergithub pagesgithub.io处理copy[git commit][git commit]定期更新推送

简而言之,就是github里用两个分支,对应磁盘上两个不同的目录,一个目录blog-master放博客源代码,一个目录gh-pages放生成的页面。各自独立提交就ok了。

创建新文章

初学者对创建新文章的格式会把握不好,所以可以用命令行增加新文章。

rake post title="My first blog"

自动复制

jekyll 使用指令 bundle exec jekyll build 或 bundle exec jekyll serve 处理页面代码之后的静态内容全部都放在 _site 目录下,需要手工复制到 gh-pages 目录,所以我们需要自动化脚本来处理这些事情。

编辑根目录下的 Rakefile 在尾部增加:

# copy from https://www.sitepoint.com/jekyll-plugins-github/
#
GH_PAGES_DIR = "gh-pages" desc "Build Jekyll site and copy files"
task :build do
system "jekyll build"
system "rm -r ../#{GH_PAGES_DIR}/*" unless Dir['../#{GH_PAGES_DIR}/*'].empty?
system "cp -r _site/* ../#{GH_PAGES_DIR}/"
system "echo nojekyll > ../#{GH_PAGES_DIR}/.nojekyll"
end desc "commit Jekyll site and push to github repository"
task :publish do
title = ENV['TITLE'] || "at #{Date.today}" system "cd ../#{GH_PAGES_DIR}"
system "git commit -m \"publish #{title}\""
system "git push origin gh-pages"
end

然后检查 _config.xml 中的 exclude 项,把 Rakefile 加进去。我的该项配置内容如下,加了好多东西:

exclude:
[
"less",
"node_modules",
"Gruntfile.js",
"package.json",
"package-lock.json",
"README.md",
"README.zh.md",
"Rakefile"
]

等你的文章写完了,就到命令行,运行 rake build 命令。如果预览觉得可以,就运行 rake publish title="加了文章" 提交到 github。 记得别忘记源代码也手动去提交,脚本不管源代码的自动提交。

网站预览

静态内容在 gh-pages 目录下,并没有任何支持浏览器访问浏览的功能。为了把这个目录中的内容可网络访问,可以在 gh-pages 目录下启动命令行运行

python3 -m http.server

我的Mac电脑里有python环境,可以直接使用,如果各位看官运行命令的时候出现异常,请先检查python环境。

自动化辅助功能

  • 自动更新 gh-pages 目录: rake build
  • 自动提交 gh-pages 目录到github中: rake publish title="add article MyFirstBlog"

参考文献

  1. Github page搭建博客使用自定义插件的方法
  2. Jekyll Plugins on GitHub
  3. Quickstart for GitHub Pages
  4. 在Github Pages中使用第三方插件
  5. 使用GitHub Page部署静态页面,以及.nojekyll的坑。。
  6. jekyll安装plantuml
  7. 有哪些 Jekyll 模板值得推荐?
  8. Jekyll Spaceship
  9. kramdown基本语法
  10. SwedbankPay/kramdown-plantuml

为Jekyll静态网站添加PlantUML插件的更多相关文章

  1. 给jekyll博客添加天气插件

    layout: post title: 给博客添加天气插件 date: 2020-04-26 author: Dapenson header-img: img/post-bg-debug.png ca ...

  2. 在Azure Storage 托管HTTP静态网站

    本文演示了在Azure Storage托管HTTP静态网站. 注意:HTTP已经不建议使用. 创建Azure StorageV2 存储账户 账户类型选择“StorageV2(通用版V2)”: 本例中, ...

  3. 工具:使用jekyll生成静态网站

    在使用前端框架构建网页而不使用后端平台与数据库,即没有服务器的条件下读取文件夹其他文件,浏览器可能会阻止访问.对于这种静态构建可以使用简单的生成工具jekyll.它主要适用于将静态文件生成静态网站,在 ...

  4. jekyll 将纯文本转化为静态网站和博客 静态网站生成器

    jekyll 将纯文本转化为静态网站和博客 静态网站生成器 这个貌似对windows 支持不是很好~ 但是有支持,官方说不建议使用

  5. 给静态网站的链接添加nofollow属性

    给网站的链接添加nofollow属性对SEO非常有效,如果是动态网站,实现的方法比较多,但是对于静态网站来说只能借助CSS或者JS来实现,单纯的CSS实现需要覆盖所有的链接出现位置:JS与CSS结合则 ...

  6. 为Jekyll+GitHub Pages添加全文搜索功能

    动态演示如下: [上传失败, 请自行搜索原文] 源码库: program-in-chinese/team_website 找到此JS工具: christian-fei/Simple-Jekyll-Se ...

  7. Jekyll博客添加Valine评论

    Jekyll博客添加Valine评论 关于github搭建jekyl博客,在这里不做过多描述,详情参考: 百度搜索关键字:github搭建jekyll博客 官网:https://www.jekyll. ...

  8. 利用Apache部署静态网站(一)

    Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且可通过简单的API扩充, ...

  9. 使用 Java 和 Maven (JBake) 生成静态网站

    使用 JBake("mvn generate-resources")构建您的静态网站或博客.使用布局.宏和数据文件. 我们迁移了整个www.optaplanner.org网站(13 ...

  10. 使用prismjs为网站添加代码高亮功能

    prismjs 是一款轻量.可扩展的代码语法高亮库,使用现代化的 Web 标准构建,使用 Prismjs 可以快速为网站添加代码高亮功能,支持超过113中编程语言,还支持多种插件,是简洁.高效的代码高 ...

随机推荐

  1. 《HelloGitHub》第 80 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  2. SSH(六)hibernate持久层模板于事务管理

    持久层只要完成数据对数据库增删改查的操作,我们常说的hibernate区别于mybatis是在于他的全自动,而hibernate的全自动则主要体现于 他的模板,一些简单的数据操作我们就不用再去手写sq ...

  3. Qt对象跨线程出现的问题记录,以及解决方案

    Qt在跨线程开发的时候可能会出现不少问题,在这里记录一下 Qt目前用下来还是非常强大的,虽然只是用在桌面端程序开发上,但是其强大的桌面开发库真的挺好用的(Layout除外,你妈死了). Qt除了UI, ...

  4. ob-myfreemp3

    网站 aHR0cDovL3Rvb2wubGl1bWluZ3llLmNuL211c2ljLw== 打开之后随便搜一个歌手的名字或歌曲(这里搜林俊杰)  m/api/search,可以看到数据全在这里 全 ...

  5. Ubuntu:Docker 容器操作

    创建容器 1.docker run [option] 镜像名 [向启动容器中传入的命令] 常用可选说明 -i 表示以"交互模式"运行容器 -t 表示容器启动后会进入其命令行.加入这 ...

  6. Safari浏览器对SVG中的<foreignObject>标签支持不友好,渲染容易错位

    在 svg 中需要写一个 markdown 编辑器,需要用到 <foreignObject> 绘制来html,编辑器选择了 simplemde.大致html部分结构如下,<markd ...

  7. 学习js的一些笔记

    1,对变量的一些认识 在学习java的过程中,我对变量的理解,其实就是一个在运行期进行简单储存的数据的内存空间,运行期结束后就会在各个代码的垃圾回收机制中在内存空间中消除. 对于变量,在java中,一 ...

  8. [seaborn] seaborn学习笔记5-小提琴图VIOLINPLOT

    文章目录 5 小提琴图Violinplot 1. 基础小提琴图绘制 Basic violinplot 2. 小提琴图样式自定义 Custom seaborn violinplot 3. 小提琴图颜色自 ...

  9. 华为云Stack新版发布:构筑行业云底座,共创行业新价值

    摘要:在以"政企深度用云,释放数字生产力"为主题的华为云Stack战略暨新品发布会上,华为云提出深度用云三大关键举措,并发布华为云Stack 8.2版本,以智能进化推动创造行业新价 ...

  10. Git Rebase和Merge的用法

    title: Git Rebase和Merge的用法 categories: 后端 tags: - Git Rebase和Merge是什么? merge和rebase的作用都是合并两个分支,其区别在于 ...