在没有 Jekyll 服务器/没有根目录的情况下使用 Jekyll

Use Jekyll without Jekyll server / without root directory

我今天才开始使用 Jekyll,我正在尝试弄清楚如何使用它来创建一个可移植的静态站点。具体来说,我希望能够在不使用 Jekyll 服务器的情况下访问该站点。

This answer 说这是不可能的,但是,它已经有几年的历史了,看起来静态站点生成器应该能够生成一个不需要服务器即可运行的站点(可以通过浏览器作为文件访问file:///...)

Jekyll docs 说 Jekyll 站点可以通过将 _site/ 文件夹放在 Web 服务器的根目录中来部署在远程服务器上。我如何强制 Jekyll 使用相对链接,以便我可以 运行 从根目录以外的目录构建站点?

我担心这个问题的答案是"it's not possible",或者至少是"it's not possible without some trickery"。我过去使用过 Wordpress,在 LAMP 服务器上的任何目录中设置 wordpress 安装是微不足道的。我觉得必须有一些简单的方法可以用 Jekyll 做到这一点,但我无法在任何地方找到答案。

This answer 仍然有效。但我必须承认,调整 baseurl 并不是真正可移植的。你不能总是猜出正确的路径。

让我们尝试在文件系统上使用 ./path/to.

这样的亲戚 url 使其成为 运行

我们需要调整什么

检查位于 file:///path/to/_site/index.html 的索引页,我们可以发现一些潜在的问题:

  • 样式无效
  • post 像 file:///jekyll/update/2016/08/05/welcome-to-jekyll.html 一样按照 /:categories/:year/:month/:day/:title.html permalink 模式链接。我们知道文件夹层次结构在使用相对链接时是一场噩梦。
  • 页。唯一的一个是关于一个已经定义的指向 /about/ 的永久链接,它在文件系统中不起作用,因为它解析为 file:///about/

为了避免文件夹层次结构地狱,我们将在根目录下创建每个 post 和页面。

重新定义永久链接

_config.yml中我们添加:

defaults:
  -
    scope:
      type: "posts"
    values:
      permalink: :slug:output_ext

  -
    scope:
      type: "pages"
    values:
      permalink: :basename:output_ext

现在任何 post 都在根目录下生成。

但是这个关于页面仍然在关于文件夹中生成。为什么?

因为 front matter 永久链接覆盖了默认配置。我们从 about.md 前面的内容中删除 permalink: /about/,现在我们的页面在根 /path/to/_site/about.html 处生成。好!

重写链接

我们现在使用 ./ 表达式使我们的链接相对于根目录。

_includes/head.html

<link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">

变成

<link rel="stylesheet" href="{{ "./main.css" }}">

_includes/header.html

<a class="site-title" href="{{ site.baseurl }}/">{{ site.title }}</a>

变成

<a class="site-title" href="./index.html">{{ site.title }}</a>

<a class="page-link" href="{{ my_page.url | prepend: site.baseurl }}">{{ my_page.title }}</a>

变成

<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>

index.html

<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>

变成

<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>

您现在可以导航了。

记得把所有的东西都放在根目录下就可以了。

我在没有服务器的情况下遇到了问题 运行 Jekyll,并且能够通过从我使用的主题中删除永久链接配置来解决它(从 _config.yml 中删除了永久链接:行)。还必须确保所有非 post URL 使用绝对文件路径(如关于和联系)。