jekyll 初识

作者: 一曲广陵散 | 来源:发表于2017-02-17 13:36 被阅读36次

    引用
    中文官方文档

    一 目录结构

    jekyll核心是一个文本转换引擎, 用你最喜欢的标记语言写文章,然后jekyll会帮助你套入一个或者一系列的布局中, 在整个过程中,你可以设置URL路径,你的文本在布局中的显示样式等等

    _config.yml 保存的是配置数据,很多配置选项都可以在命令行中进行设置, 但是如果把配置直接写入_config.yml文件中,可以不在命令行中输入

    _drafts 草稿是未发布的文章,这些文件的格式中都没有title.MARKUP数据

    _includes 可以加载这些包含部分到布局或者文章中,方便重用, 用标签{% include file.ext %} 可以将文件 _includes/file.ext 包含进来

    _layouts 布局是包裹在文章外部的模板, 布局可以在YAML头信息中根据不同文章进行选择, 标签{{ content }} 可以将content 插入到页面中

    _posts 这里放的就是文章, 文件格式很重要,必须符合 year-month-day-title.markup 格式, 永久链接可以在文章中自己定制,但是数据和标记语言都是根据文件名来确定的

    _data 格式化好的网站数据应该放在这里,  jekyll 的引擎会自动加载在该目录下所有yaml 文件,(后缀是 .yml, .yaml, .json, .csv) , 这些文件可以经由 'site.data' 访问,  如果有一个members.yml 文件在该目录下, 可以通过site.data.members 获取该文件的内容

    _site 一旦jekyll 完成转换, 就会将生成的页面放在这里(默认), 所以最好将此目录放进.gitignore 中(不上传到github)

    .jekyll-metadata 该文件帮助jekyll 跟踪哪些文件从上次建立站点开始到现在 没有被修改,  哪些文件需要在下一次站点建立时候重新生成,  该文件不会被包含在生成的站点中,  将其加入到.gitignore 文件可能是一个好主意

    index.html 如果这些文件中包含了YAML头信息部分,  jekyll 会自动将它们进行转换, 当然,其他的.html, .markdown , .md 或者 .texttile 等在站点根目录下 或者不是以上提到的目录中的文件也会被转换

    其他 其他一些没有被提及的目录和文件如 css ,images 文件夹,  favicon.ico 等文件都将被完全拷贝到生成的site 中

    二 配置

    jekyll 允许自己设置你的网站,这很大程度上归功于灵活强大的配置功能,  可以配置在网站根目录下的_config.yml 文件中,  也可以作为命令行的标记来配置

    1 配置设置

    1-1 全局配置

    Site Source 修改jekyll 读取文件的路径,  source: DIR , -s , --source DIR

    Site Destination 修改jekyll 写入文件的路径  destination: DIR , -d, --destination DIR

    Safe 禁用自定义插件    safe: BOOL , --safe

    Exclude 转换时候排除某些文件, 文件夹  exclude: [DIR, FILE, ...]

    Include 转换时候强制包含某些文件,文件夹, .htaccess 是一个典型例子,因为默认排除.开头的文件 include: [DIR, FILE, ...]
    Keep files 当生成站点时候,保留选择的文件,对文件不是由jekyll 生成是有用的, 例如由你的构建工具生成的文件或者资源,路径是相对于destination keep_files: [DIR, FILE, ...]

    Time Zone 设置时区,这个设置相当于TZ变量,Ruby用它来处理日期和时间,  默认值是操作系统的时区

    Encoding 设置文件的编码,默认值是utf-8, 使用命令 ruby -e 'puts Encoding:: list.join("\n")' 查看Ruby可用的编码

    Defaults 设置YAML头信息的默认值

    1-2. 编译选项

    Regeneration 允许文件修改时候自动重新生成网站,  -w, --watch

    Configuration 手动设置配置文件,可以设置多个,且后面的配置会覆盖前边的 --config File1, [, File2, ... ]

    Drafts 处理草稿  --drafts

    Environment   build时候使用特定的环境变量,  JEKYLL_ENV=production

    Future 用将来的日期发布文章   future: BOOL, --future

    LSI 为相关的文章生成索引    lsi: BOOL --lsi

    Limit Posts 限制文章的数量   limit_posts: NUM, --limit_posts NUM

    Force polling 强制使用轮询   --force_polling

    Verbose output 显示详细输出   -V, --verbose

    Silence Output 在编译期间不显示的正常输出   -q, --quiet

    Incremental build 启用试验特性incremental build, Incremental build只重建修改过的posts 和 pages, 对于大型网站有显著的性能提升,  但在特定情况下也会影响网站生成 incremental: BOOL, -I, --incremental

    Liquid profiler 生成一个Liquid 概述文档来帮助你发现性能瓶颈  profile: BOOL --profile

    1-3. 服务选项

    除了下边的选项, serve命令还可以接收 build 的选项,  当运行网站服务之前的编译时候使用
    local Server Port 监听所给的端口   port: PORT , --port PORT

    local Server Hostname 监听所给的主机名   host: HOSTNAME, --host HOSTNAME

    Base URL 网站的根路径   baseurl: URL --baseurl URL

    Detach 从终端命令行中分离出来   detach: BOOL -B, --detach

    2. 自定义WEBRick标题

    可以在_config.yml 中为你的站点提供自定义标题

    #文件: _config.yml
    webrick: 
      headers:
        My-Header: My-Value
        My-Other-Header: My-other-Value
    

    2-1 默认

    只提供一个默认,而且这是一个不能在开发模式中缓存的content-type 头,所以当你处于开发模式时候,
    不用理会chrome的aggressive caching

    3 指定Jekyll build时候的环境

    在build 或者 serve 参数中, 能指定Jekyll 的环境和参数, 然后build会将参数应用在你内容中的任意条件语言
    例如, 在代码中的条件语句应用设置
    {% if jekyll.environment == "production" %}
    {% include disqus.html %}
    {% endif %}

    当build网站时候, if语句块中的内容不会被执行, 除非在build 命令中还指定了一个 production 环境
    JEKYLL_ENV=production jekyll build

    设置环境变量允许只在特定环境下执行指定内容
    JEKYLL_ENV 的默认值是 development,
    任何{% if jekyll.environment == "development" %}中的内容在build时都会自动显现

    环境参数可以任意设置,不只是development 或者 production , 例如你可能想在开发环境下隐藏一些元素, 比如评论功能,谷歌分析
    你可能想在development 开发环境中扩展一个"在github中编辑"的按钮, 而不包括在 production 中
    在build 命令中指定参数, 当你迁移环境时候, 可以避免更改你配置文件中的值

    4 头信息默认值

    通过使用YAML头信息可以指定站点的页面和文章的配置,设置一些东西例如布局或者自定义标题,亦或是给文章指定一个更加精确的日期/时间,这都可以往页面或者文章的头信息添加数据来实现
    很多时候,我们会发现在重复填写很多配置项, 在每个文件里设置相同的布局,对每一篇文章添加相同的分类,等等,可以添加自定义变量,比如作者名, 可能对于博客上大部分的文章来说是相同的
    jekyll 提供了一个方法在站点配置中设置这些默认值, 而不是在每次创建一个新的文章或者页面重复此配置
    可以在项目根目录下的 _config.yml 文件中设置 defaults 的值指定全站范围的默认值
    defaults 保存一个范围/值对 的数组,定义了哪些默认值要设置到一个特定的文件路径下的文件,或者可选的, 在该路径下指定的文件类型的文件
    假设想要添加一个默认的布局给站点中的所有的页面和文章, 要将这添加到_config.yml 文件

    defaults: 
      _
        scope: 
          path: "" #一个空的字符串表示所有的文件
        values:
          layout: "default"
    

    上面的例子把values 应用给scope路径中的所有文件,因为路径被设为空字符串, 将会应用到项目中的全部文件, 你可能不想给项目在的每个文件都设置一个布局,例如css文件, 可以在scope下指定type 的值

    defaults: 
      _
        scope: 
          path: ""
          type: "posts"
        values:
          layout: "default"
    

    上面的例子只会给类型是posts的文件设置默认布局,可以使用不同的类型分别是pages, posts, drafts
    或者其他站点中的集合 
    当创建一个范围/值的对, 如果选择了type, 必须指定一个值给path

    可以给defaults设置多个范围/值的对
    defaults:
    _
    scope:
    path: ""
    type: "posts"
    values:
    layout: "my-site"
    _
    scope:
    path: "projects"
    type: "pages"
    values:
    layout: "project" #覆盖之前的默认布局
    author: "Mr. Hyde"

    有了这些默认值, 所有的文章都会使用my-site布局,任何在projects/ 文件夹下的html文件会使用project布局,这些文件也会拥有值为Mr. Hyde的 page.author

    相关文章

      网友评论

        本文标题:jekyll 初识

        本文链接:https://www.haomeiwen.com/subject/lszkwttx.html