使用不带Jekyll服务器/不带根目录的Jekyll

使用不带Jekyll服务器/不带根目录的Jekyll,jekyll,Jekyll,我今天刚开始使用Jekyll,我正试图找出如何使用它来创建一个可移植的静态站点。具体地说,我希望能够在不使用Jekyll服务器的情况下访问该站点 说这是不可能的,但是,它已经有几年的历史了,而且似乎静态站点生成器应该能够生成一个不需要服务器就能运行的站点(可以通过浏览器作为文件file:///...) 假设可以通过将_site/文件夹放置在web服务器的根目录中,在远程服务器上部署Jekyll站点。如何强制Jekyll使用相对链接,以便从根目录以外的目录运行构建的站点 我担心这个问题的答案是“这

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

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

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

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

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

让我们试着让它在文件系统上运行,URL类似于
/path/to

我们需要调整什么 检查索引页,位于
file:///path/to/_site/index.html
,我们可以确定一些潜在问题:

  • 样式不起作用
  • 帖子链接类似
    file:///jekyll/update/2016/08/05/welcome-to-jekyll.html
    /:categories/:year/:month/:day/:title.html
    模式之后。我们知道,当使用相对链接时,文件夹层次结构是一场噩梦
  • 页数。唯一的一个是关于一个已经定义的permalink,指向
    /about/
    ,它不能从文件系统工作,因为它解析为
    file:///about/
为了避免文件夹层次结构地狱,我们将使每一篇文章和页面都在根目录下创建

重新定义permalinks 在\u config.yml中,我们添加:

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

  -
    scope:
      type: "pages"
    values:
      permalink: :basename:output_ext
现在在根目录下生成任何post

但此“关于”页面仍在“关于”文件夹中生成。为什么?

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

重写链接 现在,我们使用
/
表达式将链接设置为与root相关的链接

\u包括/head.html

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

变成

<link rel="stylesheet" href="{{ "./main.css" }}">
<a class="site-title" href="./index.html">{{ site.title }}</a>
<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>
<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>

\u包括/header.html

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

变成

<link rel="stylesheet" href="{{ "./main.css" }}">
<a class="site-title" href="./index.html">{{ site.title }}</a>
<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>
<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>


变成

<link rel="stylesheet" href="{{ "./main.css" }}">
<a class="site-title" href="./index.html">{{ site.title }}</a>
<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>
<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>

index.html

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

变成

<link rel="stylesheet" href="{{ "./main.css" }}">
<a class="site-title" href="./index.html">{{ site.title }}</a>
<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>
<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>

现在你可以导航了

记住将所有内容都保留在根目录下,这样就可以了。

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

让我们试着让它在文件系统上运行,URL类似于
/path/to

我们需要调整什么 检查索引页,位于
file:///path/to/_site/index.html
,我们可以确定一些潜在问题:

  • 样式不起作用
  • 帖子链接类似
    file:///jekyll/update/2016/08/05/welcome-to-jekyll.html
    /:categories/:year/:month/:day/:title.html
    模式之后。我们知道,当使用相对链接时,文件夹层次结构是一场噩梦
  • 页数。唯一的一个是关于一个已经定义的permalink,指向
    /about/
    ,它不能从文件系统工作,因为它解析为
    file:///about/
为了避免文件夹层次结构地狱,我们将使每一篇文章和页面都在根目录下创建

重新定义permalinks 在\u config.yml中,我们添加:

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

  -
    scope:
      type: "pages"
    values:
      permalink: :basename:output_ext
现在在根目录下生成任何post

但此“关于”页面仍在“关于”文件夹中生成。为什么?

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

重写链接 现在,我们使用
/
表达式将链接设置为与root相关的链接

\u包括/head.html

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

变成

<link rel="stylesheet" href="{{ "./main.css" }}">
<a class="site-title" href="./index.html">{{ site.title }}</a>
<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>
<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>

\u包括/header.html

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

变成

<link rel="stylesheet" href="{{ "./main.css" }}">
<a class="site-title" href="./index.html">{{ site.title }}</a>
<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>
<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>


变成

<link rel="stylesheet" href="{{ "./main.css" }}">
<a class="site-title" href="./index.html">{{ site.title }}</a>
<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>
<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>

index.html

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

变成

<link rel="stylesheet" href="{{ "./main.css" }}">
<a class="site-title" href="./index.html">{{ site.title }}</a>
<a class="page-link" href="./{{ my_page.url }}">{{ my_page.title }}</a>
<a class="post-link" href="./{{ post.url }}">{{ post.title }}</a>

现在你可以导航了


请记住将所有内容都保留在根目录下,这样就可以了。

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

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

您尝试了什么吗?您尝试了什么吗?谢谢您的回答!我试试看。我希望有一个更简单的方法来解决这个问题,但这是我见过的最好的解决方案。非常不幸的是,Jekyll并没有提供一种更好的方法来制作便携站点;这似乎是一个很明显的特点。谢谢你的回答!我试试看。我希望有一个更简单的方法来解决这个问题,但这是最好的