时间:2023-05-30 04:15:01 | 来源:网站运营
时间:2023-05-30 04:15:01 来源:网站运营
Github Pages + jekyll 全面介绍极简搭建个人网站和博客:本文,将会全面介绍一下如何使用Github Pages + jekyll搭建个人站点。所谓极简的意思,就是不用使用git和本地构建jekll服务,直接在Github网站上编辑设置即可,但会涉及到jekll的一些配置和编程控制。可以参看我的网站模板:https://scottcgi.github.io 使用了github内置的主题修改而成。主题目录如下:
username.github.io
,其中username必须是Github账户的用户名(我的是scottcgi),http://github.io是固定的,这个地址将会成为个人站点的网站地址。另外,我们可以勾选Initialize this repository with a README,让仓库自动创建一个README.md文件,我们用它来做站点的首页(当然也可以不创建,后面自行创建,或是建立index.html也行)。username.github.io
的子站点,比如访问地址会是:username.github.io/aaa.github.io
。可见,username.github.io
是Github默认分配给你的域名,同名仓库即代表着默认网站内容。而username.github.io/仓库名称
,是用来访问你的其它仓库的地址。username.github.io
名称。Setting
页面下有Github Pages的设置选项。绿色表示部署成功,每次修改仓库内容,都会出发Github jekyll重新编译部署,需要1-2分钟的时间,更新才能体现。如果有编译错误,包括js,css,html,markdown语法问题,都会显示红色以及错误页面和行号,同时会发邮件通知。其中,Source
有以下几个选项:gh-pages branch
是项目新建一个分支命名为这个,使用这个分支来做站点内容。master branch
是使用主分支也是默认的,来作为站点内容。master branch/docs folder
是使用主分支的docs文件夹来作为站点内容。None
就是禁用Github Pages。username.github.io
只能使用主分支,其它仓库项目可以选择其它两个。接下来Choose a theme是Github提供的内置的网站主题,选择即可应用无需其它设置。Custom domain是自定义域名,本文暂不讨论。Code
页面仅有两个文件。_config.yml
是jekyll的全局配置文件,现在里面只有一句话,theme: jekyll-theme-modernist
。我们可以手动修改这个theme主题配置,网站就会应用不同的主题。_layouts
(存放页面模板,md或html文件的内容会填充模板)_sass
(存放样式表)_includes
(可以复用在其它页面被include的html页面)_posts
(博客文章页面)assets
(原生的资源文件)js
css
image
_config.yml
(全局配置文件)index.html, index.md, README.md
(首页index.html优先级最高,如果没有index,默认启用README.md文件)自定义文件和目录
{{ variable }}
被嵌入在页面中,会在静态页面生成的时候被替换成具体的数值。常用的全局变量对象有:site
和 page
。这两个对象有很多默认自带的属性,比如:{{ site.time }}
,{{ page.url }}
。更多的默认值参看:https://jekyllrb.com/docs/variables。site
对象对应的就是网站范围,自定义变量放在_config.yml
中,比如title:自定义标题
使用{{ site.title }}
访问。page
对象对应的是单个页面,自定义变量放在每个页面的最开头,比如:---myNum:100 myStr:我是字符串---
使用{{ page.myNum }}
和 {{ page.myStr }}
访问。{% if site.title == 'Awesome Shoes' %} These shoes are awesome! {% endif %} {% if site.name == 'kevin' %} Hey Kevin! {% elsif site.name == 'anonymous' %} Hey Anonymous! {% else %} Hi Stranger! {% endif %}
{% for product in collection.products %} {{ product.title }} {% endfor %}
{{ "Hello World!" | downcase }}
转换字符串为小写。更多内置函数详见:https://jekyllrb.com/docs/liquid/filterssite
对象上,比如我们可以把导航配置到_config.yml中:nav:- name: Home link: /- name: About link: /about.html// 以下嵌入页面,page.url以 "/" 开头<nav> {% for item in site.nav %} <a href="{{ item.link }}" {% if page.url == item.link %} style="color: red;" {% endif %} > {{ item.name }} </a> {% endfor %}</nav>
当然,我们也可以把一些数据单独放入一个yml
文件,然后放在固定的数据文件夹_data
下,比如_data/navigation.yml
,这样访问这个文件的数据对象就是site.data.navigation
。_layouts
文件夹存放的是页面模板,默认需要一个default.html
,什么意思?就是说,layout提供一个页面的布局框架,这是固定的模式,包括样式、结构、布局、脚本控制等等。然后,我们在用其它md或html文件去动态填充这个框架,这样就形成了一个完整的页面。比如我的default.html
页面如下:<!doctype html><html lang="{{ page.lang | default: site.lang }}"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> {% seo %} <link rel="icon" href="https://avatars0.githubusercontent.com/u/1797320" type="image/x-icon" title="scottcgi"> <link rel="stylesheet" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}"> <script src="{{ '/assets/js/scale.fix.js' | relative_url }}"></script> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> </head> <body> <div class="wrapper"> <header {% unless site.description or site.github.project_tagline %} class="without-description" {% endunless %}> <h1>{{ site.title | default: site.github.repository_name }}</h1> <p>{{ page.description | default: site.description }}</p> <ul> {% for item in site.nav %} {% if page.url == item.link %} <li style="background-color:#069"> <a href="{{ item.link }}"> <strong>{{ item.name }}</strong> </a> </li> {% else %} <li><a href="{{ item.link }}">{{ item.name }}</a></li> {% endif %} {% endfor %} </ul> </header> <section> {{ content }} </section> </div> <footer> <p>{{ site.copyright | default: "copyright not found in _config.yml" }}</p> </footer> </body></html>
{% seo %}
是jekyll的一个插件提供的seo优化,详情在这里:https://github.com/jekyll/jekyll-seo-tag{{ content }}
这个变量是内置的,会用我们的md或html页面填充这部分内容。_includes
的页面,还有就是来自 {{ content }}
对应的页面。{{ content }}
来填充模板,而是使用_includes
的页面来代替{{ content }}
,但这样不够灵活,因为使用 {{ content }}
,我们可以在每个页面单独设置对应的layout
模板。---layout: defaulttitle: About---# About pageThis page tells you a little bit about me.
layout: default
就是告诉jekyll这个页面使用哪个模板,即这个页面会放入哪个模板的{{ content }}
。当然,我们可以在_layouts
文件夹下提供多个不同的模板,然后根据需要不同的页面使用不同的layout
。_posts
目录下:---layout: post--- 这是一篇博客文章。
post
的模板页面到_layouts
文件夹下面。---layout: default---<h1>{{ page.title }}</h1><p>{{ page.date | date_to_string }} - {{ page.author }}</p>{{ content }}
可见,模板页面本身也可以使用模板,这里post
使用了default
模板,而这里{{ content }}
就会填充_posts
下面编写的页面(如果页面使用了layout: post
模板)。blog.html
页面:---layout: defaulttitle: Blog---<h1>Latest Posts</h1><ul> {% for post in site.posts %} <li> <h2><a href="{{ post.url }}">{{ post.title }}</a></h2> <p>{{ post.excerpt }}</p> </li> {% endfor %}</ul>
site.posts
jekyll会自动生成_posts
目录的对象。post.url
jekyll会自动会设置在_posts
目录下的页面url。post.title
默认是md文件名称,但也可以在文章页面自定义title: 我的文章自定义名称
。post.excerpt
默认是文章第一段的摘要文字。关键词: