Jekyll 是一个网站生成工具,可以用来将带有一定格式的文本(如:MarkDown)转换成静态的HTML页面,

并提供了Liquid模板引擎进行页面渲染,然后可以将生成的静态网站发布到如 Github Page类似的托管网站上,

实现自己的项目页面,个人博客等。

安装

一般使用 RubyGems 来安装 Jekyll,小白的机器是 CentOS 7

(Windows环境下安装可以参考 windows文档),

首先安装以下环境:

  • Ruby
  • RubyGems
    $ sudo yum install ruby
  • NodeJS,或者其他JavaScript运行环境
    $ curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
    $ yum -y install nodejs
  • Python2.7 (Jekyll2 或更早版本需要,Linux一般自带)

然后安装 Jekyll:

$ gem install jekyll

注意:

小白在安装时遇到以下报错:

Building native extensions.  This could take a while...
ERROR: Error installing jekyll:
ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h Gem files will remain installed in /home/bai/.gem/ruby/gems/ffi-1.9.14 for inspection.
Results logged to /home/bai/.gem/ruby/gems/ffi-1.9.14/ext/ffi_c/gem_make.out

原来还需要安装 ruby development软件包,执行 sudo yum install ruby-devel

基本使用

新建一个最简单的示例网站

$ jekyll new myblog

这会在当前目录下创建一个 myblog 目录,里面包含一个示例的网站

注意:

Dependency Error: Yikes! It looks like you don't have bundler or one of its dependencies installed. In order to use Jekyll as currently configured, you'll need to install this gem. The full error message from Ruby is: 'cannot load such file -- bundler' If you run into trouble, you can find helpful resources at http://jekyllrb.com/help/!

缺少bundler包,执行 gem install bundler 命令安装

切换到 myblog 目录下,构建刚刚生成的网站

$ cd myblog
$ jekyll build

默认会将网站生成到 ./_site 目录下,生成目录可以通过配置文件 ./_config.yml

或命令行参数 --destination 设置

然后,将网站运行起来,在本地进行预览

$ jekyll server

然后可以在浏览器中 http://127.0.0.1:4000 来访问,显示如下界面

编辑博客

在刚刚预览的网站中可以看到一篇叫做 Welcome to Jekyll! 的博文(Post),

这是 Jekyll 示例网站的自带的文章,

其源码为 ./_posts/2016-10-21-welcome-to-jekyll.markdown

./_posts 目录用来放置博文,文件名称格式为 <date>-<title>.<extension>

文件内容如下:

---
layout: post
title: "Welcome to Jekyll!"
date: 2016-10-21 00:43:30 -0700
categories: jekyll update
---
You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works. Jekyll also offers powerful support for code snippets: {% highlight ruby %}
def print_hi(name)
puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %} Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].

文件开头由 --- 包含的部分被称为“头信息”,设置一些文档的相关属性:

  • layout: 表示博文使用的模板名称,对应 ./_layouts/<name>.html 文件
  • title, date, categories: 分别设置了博文的标题、日期、分类等信息

其余的部分是博文正文,对应下图中红色的部分,图中其他的部分皆是在模板中定义的

模板、主题

上面说到我们的博文模板对应的是 ./_layouts/post.html 文件,

但是我们的当前目录下并没有 ./layouts 目录啊?

其实为了方便重复利用模板, Jekyll提供了主题功能,可以在 ./_config.yml

中看到如下配置:

theme: minima

主题实际上是一个gem包,可以通过 bundle show minima 查看主题包所在的位置:

$ budnle show minima
~/.gem/ruby/gems/minima-2.0.0 $ cd ~/.gem/ruby/gems/minima-2.0.0
$ ls
assets _includes _layouts LICENSE.txt README.md _sass $ cd _layouts
$ ls
default.html home.html page.html post.html

可以看到主题目录下的 _layouts 目录里有 post.html 模板文件,

这个就是上述博文所用的模板文件,当然,我们也可以在自己的 ./_layouts 目录下

新建 post.html 文件来覆盖主题默认的模板文件。

先来看一下这个模板文件的内容:

---
layout: default
---
<article class="post" itemscope itemtype="http://schema.org/BlogPosting"> <header class="post-header">
<h1 class="post-title" itemprop="name headline">{{ page.title | escape }}</h1>
<p class="post-meta"><time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">{{ page.date | date: "%b %-d, %Y" }}</time>
{% if page.author %} • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ page.author }}</span></span>{% endif %}</p>
</header> <div class="post-content" itemprop="articleBody">
{{ content }}
</div> {% if site.disqus.shortname %}
{% include disqus_comments.html %}
{% endif %}
</article>

同样,头信息部分 layout 指示模板文件,可以看出post模板之上还有一个网站的默认模板,

然后,模板中有各种 {{ var | filter }} 标签,Jekyll 使用 Liquid 模板引擎,

这种结构就是模板标记, var 表示变量名称, filter 表示要在变量上应用的过滤器,

相当于我们通常所说的格式化字符串

例如 {{ page.date | date: "%b %-d, %Y" }} 表示将日期格式化成“月 日,年”的形式,

其中 page.date, page.title 都是在前面博文头信息中定义的变量,

在模板里可以通过 page 对象来访问。

另外,还有 {% if page.author %}...{% endif %}条件控制结构,

表示如果有 page.author 变量,则显示出来,否则不显示,

之前的Welcome博文头信息中并没有配置 author 属性,现在我们来配置一下,

修改 ./_posts/2016-10-21-welcome-to-jekyll.markdown 头信息:

---
layout: post
title: "Welcome to Jekyll!"
date: 2016-10-21 00:43:30 -0700
categories: jekyll update
author: baiyangcao
---

注意:

执行了 jekyll server 命令启动预览网站之后,

修改了的博文可以自动重新生成,而不用重新启动网站。

然后再打开博文看一下效果,显示出来了文章作者:

接着,我们就可以在 _layouts 下新建自己的模板,

_posts 目录下创建自己的博文。

发布

我们可以将使用 Jekyll 生成的网站发布到 Github 上,

使用 Github Pages 功能展示出页面,因为 Github Pages 集成了 Jekyll 构建功能,

所以我们只需要将源码推送到 Github 仓库即可

在网站根目录下新增 .gitignore 文件,将你的网站生成目录添加到里面,

默认应该是 _site 文件夹。

将网站推送到 Github 仓库后,然后设置对应的 Github Pages 即可,

具体可参见 利用Github Pages建立仓库“门面”

扩展

其实我们也可以为网站指定其他主题,虽然官网文档上说主题通过 RubyGems 分发,

但是我们一般在网站搜索到的主题并不一定在 RubyGems 上发布,

所以有时我们可以直接将主题源文件直接拷贝到自己的网站根目录来使用。

官方 Github 仓库的 Wiki 页面中有个主题

列表,大家有兴趣可以看一下。

参考链接:

http://jekyllcn.com/docs/home/

Jekyll 使用入门的更多相关文章

  1. Jekyll 搭建

    Jekyll搭建个人主页 早上昨晚上弄hexo的时候就开始有问题,发现命令有错误!今天早上来就开始把另外建立了仓库,转Jekyll,并不顺利,做了一天了,基本的theme的本地和远端主页可以显示,但当 ...

  2. 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门

    喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉得独立博客的管 ...

  3. 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门[zz]

    喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉得独立博客的管 ...

  4. 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门(转)

    转自:http://www.ruanyifeng.com/blog/2012/08/blogging_with_jekyll.html 喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog, ...

  5. github page+jekyll搭博客初体验

    div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin: 0 0 10px; padding ...

  6. 使用jekyll在GitHub Pages上搭建个人博客【转】

    网上有不少资源,但大多是“授人以鱼”,文中一步一步的告诉你怎么做,却没有解释为什么,以及他是如何知道的.他们默认着你知道种种专业名词的含义,默认着你掌握着特定技能.你折腾半天,查资料,看教程,一步步下 ...

  7. 专为设计师而写的GitHub快速入门教程

    专为设计师而写的GitHub快速入门教程 来源: 伯乐在线 作者:Kevin Li     原文出处: Kevin Li 在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目 ...

  8. 使用Jekyll搭建博客

    最近闲来无事,捣鼓了一下Git以及Github,尝试了一下基于Jekyll搭建个人博客的方法,现在把整个过程进行一个总结(部分内容转自互联网): <img src="http://up ...

  9. 坚持自学的第二天,bootstrap初入门

    前言 昨天,初步学完了jekyll目录结构与Liquid语法的应用与认识. 日志 今天刚入门,做了一个bootstrap导航栏,但是选中状态不行,找了JS中写好的API,写法与视频中讲的有点不一样,但 ...

随机推荐

  1. WebGL学习笔记(2)

    根据上一篇学习笔记,理解WebGL的工作原理及基本调用代码后,可以开始研究3D顶点对象的缩放.旋转.以及对对象进行可交互(鼠标或键盘控制)的旋转或者缩放. 要理解对象的旋转/缩放需要首先学习矩阵的计算 ...

  2. mysql5.7 本地计算机上的mysql 服务启动后停止 的问题解决

    mysql5.7 本地计算机上的mysql 服务启动后停止. 问题: 在cmd 下mysql服务mysql服务无法启动任何错误法启动 服务没有报告任何错误     在服务里面启动是   早上来了发现项 ...

  3. MySQL高可用之MGR安装测试(续)

      Preface       I've implemented the Group Replication with three servers yesterday,What a shame it ...

  4. 关于mysql8.0.11版本在win10安装

    新的mysql版本没有.exe文件一键安装,网上找了教程,自己搞了下 首先是在菜鸟教程 http://www.runoob.com/mysql/mysql-install.html 根据它的提示下载w ...

  5. TCP回话劫持原理和利用

    由于 TCP 协议并没有对 TCP 的传输包进行身份验证,所以在我们知道一个 TCP 连接中的 seq 和 ack 的信息后就可以很容易的伪造传输包,假装任意一方与另一方进行通信,我们将这一过程称为 ...

  6. Co. - Microsoft - Windows - Tomcat、JDK、MySQL通过 Inno 集成为exe部署包

    需求 客户设备为Windows系统,需要部署公司产品,因此将Tomcat.JDK.MySQL.Java.war 打包整合成exe文件,Windows下一键部署安装. 最佳实践 1.下载免安装的mysq ...

  7. Git推送到远程分支出错

    执行git push -u origin master fatal: 'git@github.com:qilinonline/git_test.git' does not appear to be a ...

  8. maven-坐标与依赖

    1.坐标-找到项目依赖的重要依据 <groupId>cmbc.com.cn</groupId> <artifactId>myapp</artifactId&g ...

  9. jdk与tomcat的环境配置

    一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.最好从官网下载,也可以直接度娘. 2.下载完毕后,安装jdk,​直接按照安装向导的提示安装即可,安装时可以自己选择安装路径,我的安 ...

  10. 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组

    第二章 数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构.JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...