【问题标题】:Use Jekyll without Jekyll server / without root directory在没有 Jekyll 服务器/没有根目录的情况下使用 Jekyll
【发布时间】:2016-12-11 06:02:05
【问题描述】:

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

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

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

我担心这个问题的答案是“这是不可能的”,或者至少是“没有一些诡计是不可能的”。我过去使用过 Wordpress,在 LAMP 服务器上的任何目录中设置 wordpress 安装都很简单。我觉得必须有一些简单的方法可以使用 Jekyll 做到这一点,但我无法在任何地方找到答案。

【问题讨论】:

  • 你试过了吗?

标签: jekyll


【解决方案1】:

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

让我们尝试让它在具有诸如./path/to 之类的亲戚网址的文件系统上运行。

我们需要调整什么

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

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

为了避免文件夹分层地狱,我们将在根目录下创建每个帖子和页面。

重新定义永久链接

_config.yml 我们添加:

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

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

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

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

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

重写链接

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

_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 没有提供更好的方法来制作可移植网站;这似乎是一个如此明显的特征。
【解决方案2】:

我在没有服务器的情况下运行 Jekyll 时遇到了问题,我可以通过从我正在使用的主题中删除永久链接配置来解决它(从 _config.yml 中删除了永久链接:行)。还必须确保所有非发布 URL 都使用绝对文件路径(例如 about 和 contact)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多