为Jekyll静态网站添加PlantUML插件
前言
突然想起来要好好整理一下自己的博客空间,已经荒废很多年,如果再不捡起来,等到自己知识老化的时候再去写东西就没人看了。
使用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
分支关联。这样两个可以互不干扰。
简而言之,就是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"
参考文献
- Github page搭建博客使用自定义插件的方法
- Jekyll Plugins on GitHub
- Quickstart for GitHub Pages
- 在Github Pages中使用第三方插件
- 使用GitHub Page部署静态页面,以及.nojekyll的坑。。
- jekyll安装plantuml
- 有哪些 Jekyll 模板值得推荐?
- Jekyll Spaceship
- kramdown基本语法
- SwedbankPay/kramdown-plantuml
为Jekyll静态网站添加PlantUML插件的更多相关文章
- 给jekyll博客添加天气插件
layout: post title: 给博客添加天气插件 date: 2020-04-26 author: Dapenson header-img: img/post-bg-debug.png ca ...
- 在Azure Storage 托管HTTP静态网站
本文演示了在Azure Storage托管HTTP静态网站. 注意:HTTP已经不建议使用. 创建Azure StorageV2 存储账户 账户类型选择“StorageV2(通用版V2)”: 本例中, ...
- 工具:使用jekyll生成静态网站
在使用前端框架构建网页而不使用后端平台与数据库,即没有服务器的条件下读取文件夹其他文件,浏览器可能会阻止访问.对于这种静态构建可以使用简单的生成工具jekyll.它主要适用于将静态文件生成静态网站,在 ...
- jekyll 将纯文本转化为静态网站和博客 静态网站生成器
jekyll 将纯文本转化为静态网站和博客 静态网站生成器 这个貌似对windows 支持不是很好~ 但是有支持,官方说不建议使用
- 给静态网站的链接添加nofollow属性
给网站的链接添加nofollow属性对SEO非常有效,如果是动态网站,实现的方法比较多,但是对于静态网站来说只能借助CSS或者JS来实现,单纯的CSS实现需要覆盖所有的链接出现位置:JS与CSS结合则 ...
- 为Jekyll+GitHub Pages添加全文搜索功能
动态演示如下: [上传失败, 请自行搜索原文] 源码库: program-in-chinese/team_website 找到此JS工具: christian-fei/Simple-Jekyll-Se ...
- Jekyll博客添加Valine评论
Jekyll博客添加Valine评论 关于github搭建jekyl博客,在这里不做过多描述,详情参考: 百度搜索关键字:github搭建jekyll博客 官网:https://www.jekyll. ...
- 利用Apache部署静态网站(一)
Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且可通过简单的API扩充, ...
- 使用 Java 和 Maven (JBake) 生成静态网站
使用 JBake("mvn generate-resources")构建您的静态网站或博客.使用布局.宏和数据文件. 我们迁移了整个www.optaplanner.org网站(13 ...
- 使用prismjs为网站添加代码高亮功能
prismjs 是一款轻量.可扩展的代码语法高亮库,使用现代化的 Web 标准构建,使用 Prismjs 可以快速为网站添加代码高亮功能,支持超过113中编程语言,还支持多种插件,是简洁.高效的代码高 ...
随机推荐
- 《HelloGitHub》第 80 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- SSH(六)hibernate持久层模板于事务管理
持久层只要完成数据对数据库增删改查的操作,我们常说的hibernate区别于mybatis是在于他的全自动,而hibernate的全自动则主要体现于 他的模板,一些简单的数据操作我们就不用再去手写sq ...
- Qt对象跨线程出现的问题记录,以及解决方案
Qt在跨线程开发的时候可能会出现不少问题,在这里记录一下 Qt目前用下来还是非常强大的,虽然只是用在桌面端程序开发上,但是其强大的桌面开发库真的挺好用的(Layout除外,你妈死了). Qt除了UI, ...
- ob-myfreemp3
网站 aHR0cDovL3Rvb2wubGl1bWluZ3llLmNuL211c2ljLw== 打开之后随便搜一个歌手的名字或歌曲(这里搜林俊杰) m/api/search,可以看到数据全在这里 全 ...
- Ubuntu:Docker 容器操作
创建容器 1.docker run [option] 镜像名 [向启动容器中传入的命令] 常用可选说明 -i 表示以"交互模式"运行容器 -t 表示容器启动后会进入其命令行.加入这 ...
- Safari浏览器对SVG中的<foreignObject>标签支持不友好,渲染容易错位
在 svg 中需要写一个 markdown 编辑器,需要用到 <foreignObject> 绘制来html,编辑器选择了 simplemde.大致html部分结构如下,<markd ...
- 学习js的一些笔记
1,对变量的一些认识 在学习java的过程中,我对变量的理解,其实就是一个在运行期进行简单储存的数据的内存空间,运行期结束后就会在各个代码的垃圾回收机制中在内存空间中消除. 对于变量,在java中,一 ...
- [seaborn] seaborn学习笔记5-小提琴图VIOLINPLOT
文章目录 5 小提琴图Violinplot 1. 基础小提琴图绘制 Basic violinplot 2. 小提琴图样式自定义 Custom seaborn violinplot 3. 小提琴图颜色自 ...
- 华为云Stack新版发布:构筑行业云底座,共创行业新价值
摘要:在以"政企深度用云,释放数字生产力"为主题的华为云Stack战略暨新品发布会上,华为云提出深度用云三大关键举措,并发布华为云Stack 8.2版本,以智能进化推动创造行业新价 ...
- Git Rebase和Merge的用法
title: Git Rebase和Merge的用法 categories: 后端 tags: - Git Rebase和Merge是什么? merge和rebase的作用都是合并两个分支,其区别在于 ...