时间: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(原生的资源文件)jscss 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.urljekyll会自动会设置在_posts目录下的页面url。post.title 默认是md文件名称,但也可以在文章页面自定义title: 我的文章自定义名称。post.excerpt 默认是文章第一段的摘要文字。关键词: