• Github 中文镜像
Sign inSign up
Watch966
Star102.4k
Fork61.8k
Branch: working.beex.help
Switch branches/tags
Branches
Tags
  •  
K / Bx gen.md
移动浏览 Clone
加载中...
到移动设备上浏览
105 lines 6.80 KB
First commit on 9 Jun 2020

    一个小问题

    为了最大化发挥增量构建的性能,如果只是删除一篇文章,在重建的时候不会更新相应分类和标签的文章列表页,但只要重新保存了(哪怕没有任何修改)任意一篇文章,就可以触发该文章所在的分类和标签的文章列表页重建。

    理由:由于构建列表页是个比较耗时的过程,而删除文章只是个偶尔发生的情形,所以我跳过了这种情形,使其不触发列表页的构建。我自己测试的“删除也重建:只有修改才重建”的耗时对比大概是 3:1。

    基本用法

    • 生成网站

      增量构建,多站点时会构建全部站点。

      bx gen
      
    • 全量构建

      只重新生成全部 .md 文件,未编辑过的附件依然会被跳过,这条命令主要用在修改模板文件菜单后重建全部页面。

      bx gen --force
      
    • 指定站点

      只构建 [sites.1] 这个站点(--site 可以简写为 -s)。

      bx gen --site=1
      bx gen -s=1
      
    • 热重建

      0.7.0 开始支持

      当文章发生变化时,自动重建站点。

      bx gen --site=1 --hot-gen
      bx gen -s=1 --hot-gen
      

    Generating 的流程

    基本概念

    • Beex 以 archive 指代文章页面的概念,在其他内容管理系统中可能叫 article post page 等等。
    • site.source_config.toml 中相应站点的 source
    • meta.target 指 archive 中 BeexMeta 设置的 target

    流程

    这里有一张新版本的简易流程图:重写 Beex

    以下是老版本的:

    1. site.source 目录开始。
    2. 开始遍历目录中的项目。
      • 如果目录中只有一个 .md 文件,则尝试读取 meta.target
        • 如果读取到 meta.target,则本目录中所有的文件都以 meta.target 的目录为目标目录。
          • 此规则仅适用于当前目录的文件,子目录中的不受 meta.target 影响,有两个原因:
            1. 多层子目录的判断逻辑过于复杂。
            2. 更重要的是:如果指定了 meta.target,源文件的移动就不应该影响 generating 的目标位置。
          • 进阶用法:如果你希望子目录也保持相对路径的结构,可以在子目录中保持唯一 .md 文件,并设置相应的 meta.target,此方法可递归使用。
        • 如果没有读取到 meta.target,全部文件以 site.target 为目标根目录,并且以自身相对于 site.source 的路径复制到目标位置。
          • 例如:srouce/123.jpg 会被复制到 target/123.jpg,而 source/456/789.jpg 会被复制到 target/456/789.jpg
      • 如果目录中有多个 .md 文件,则每个 .md 会被复制到自己指定的 meta.target(如果有的话),其他文件的目标根位置都是 site.target
        • 也就是说其他文件不一定保持与 .md 的相对位置。
      • 如果项目是目录,进入目录并从第 2 步开始。
    3. 全部生成完毕后,开始生成列表页。
      • 如果 archive 的 meta.targetindex.htmlindex.htm文件名,则生成的 url 会自动删除文件名,以目录的形式作为连接。
        • 比如 foo/bar/index.html 会变为 /foo/bar/
        • 一般虚拟主机都默认支持隐藏 index.html 文件名,如果不支持你可以搜 .htaccess 隐藏 index.html 的教程或者给主机商发工单。
      • 生成每个分类的文章列表。(该分类下没有更新文章则跳过)
      • 生成全部分类列表。
      • 生成每个标签的文章列表。(该标签下没有更新文章则跳过)
      • 生成全部标签列表。
      • 生成全部文章页。
      • 生成首页。
      • 如果 archives 中某个页面的 meta.target 占用了上面的某个目录,则跳过相应的页面,也就是你也可以手工维护某个特定的列表页和首页。
    4. 结束。

    图片

    如果 _config.toml 里设置了 image_quality (1 至 100),则压缩 jpg 图片,目前图片库处理大图片的速度有点慢,好在 bx gen 默认不是全量构建,等待优化即可。

    相关参考: