我今天刚开始使用Jekyll,我正在试图弄清楚如何使用它来创建一个便携式静态网站。具体来说,我希望能够在不使用Jekyll服务器的情况下访问该站点。
This answer说这是不可能的,但是,它已经有几年了,似乎静态站点生成器应该能够生成一个不需要服务器运行的站点(可以是通过浏览器作为文件file:///...
)
Jekyll docs表示可以通过将_site /文件夹放在Web服务器的根目录中,将Jekyll站点部署在远程服务器上。如何强制Jekyll使用相对链接,以便我可以从根目录以外的目录运行构建的站点?
我担心这个问题的答案是“它不可能”,或者至少“没有一些诡计就不可能”。我过去使用过Wordpress,在LAMP服务器上的任何目录中设置wordpress安装都是微不足道的。我觉得必须有一些简单的方法来与Jekyll一起做,但我无法在任何地方找到答案。
答案 0 :(得分:3)
This answer仍然有效。但我必须承认,调整baseurl并不是真的可以移植。你无法总是猜出正确的路径。
让我们尝试使用./path/to
之类的亲戚网址在文件系统上运行。
检查索引页面,坐在file:///path/to/_site/index.html
,我们可以找出一些潜在的问题:
file:///jekyll/update/2016/08/05/welcome-to-jekyll.html
permalink模式后的/:categories/:year/:month/:day/:title.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.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>
现在你可以导航了。
请记住将所有内容保留为根目录,这样就可以了。
答案 1 :(得分:0)
我在没有服务器的情况下运行Jekyll时遇到问题,并且能够通过从我正在使用的主题中删除永久链接配置来解决此问题(从_config.yml中移除了永久链接:行)。还必须确保所有非发布URL都使用绝对文件路径(例如About和contact)。