24

当我运行jekyll --server我的站点时,它位于http://localhost:4000/,但当我部署到 GitHub 项目页面时,它位于http://username.github.com/projectname/

这意味着在引用样式表和其他资源时,我不能使用绝对 URL。index.html当 eg和使用相同的布局时,相对 URL 会中断2012/01/01/happy-new-year.html。将样式表和其他资源添加到 GitHub 项目页面存储库的公认/好的方法是什么?

交叉发布到GitHub 问题

4

5 回答 5

29

出现此问题是因为根目录始终是用户和项目页面中的用户 url (user.github.com)。我找到了一个解决方案:将文件中的url变量配置_config.yml到github项目页面:

safe: true
...
url: "http://user.github.io/project-name"

然后,在布局中,使用绝对引用,使用site.url变量来做到这一点:

<link rel="stylesheet" href="{{ site.url }}/css/styles.css">

并使用以下命令运行服务器:

$jekyll --server --url=http://localhost:4000

命令行选项以本地模式覆盖配置文件中的设置。通过这些设置,我得到了指向正确位置的所有链接,它们都托管在 github 和本地模式中。


更新:Jekyll 1.0由于 Jekyll 达到 1.0,上述选项server及其url各自的命令行选项--server--url被弃用。新版本说明:

_config.yml文件中,添加变量baseurl(不带斜杠):

baseurl: "http://user.github.io/project-name"

在布局或页面中,使用绝对引用,使用site.baseurl变量:

<link rel="stylesheet" href="{{ site.baseurl }}/css/styles.css">

然后,运行本地服务器(baseurl 选项故意为空):

$ jekyll serve --watch --baseurl=

有关文档更改的更多详细信息。

于 2013-04-16T21:21:39.953 回答
4

由于--url命令行已被弃用,因此还有另一种解决方案。

假设您的 URL 路径repo在 you 中http://name.github.io/repo。现在在所有链接中都使用绝对 URL,例如

<link rel="stylesheet" href="/repo/css/syntax.css">

或链接

<a href="/repo/license/">License</a>

--baseurl您现在需要的只是在本地运行时添加到命令行。

jekyll --server --baseurl /repo/
于 2013-05-12T17:05:09.783 回答
2

baseurl: '/project-name'简而言之,回答您的问题:添加_config.yml

对于 CSS/JS 链接:{{ site.baseurl }}/css/styles.css

对于所有其他链接:{{ site.baseurl }}{{ post.url }}

Jeykll GH-Pages 的官方答案在这里:http: //jekyllrb.com/docs/github-pages/

摘抄:

项目页面 URL 结构

gh-pages有时在将分支推送到 GitHub 之前预览一下 Jekyll 站点会很不错。然而,GitHub 用于项目页面的类似子目录的 URL 结构使 URL 的正确解析复杂化。这是一种利用 GitHub 项目页面 URL 结构 ( username.github.io/project-name/) 的方法,同时保持在本地预览 Jekyll 站点的能力。

  1. _config.yml 中,将baseurl选项设置为/project-name- 注意前导斜杠和没有尾随斜杠。前任:baseurl: '/my-proj'

  2. 当引用 JS 或 CSS 文件时,这样做:{{ site.baseurl}}/path/to/css.css– 注意紧跟在变量后面的斜线(就在“路径”之前)。

  3. 当做永久链接或内部链接时,这样做:{{ site.baseurl }}{{ post.url }}- 注意两个变量之间没有斜线。

  4. 最后,如果您想在使用 提交/部署之前预览您的站点jekyll serve,请务必将一个空字符串传递给该--baseurl选项,以便您可以localhost:4000正常查看所有内容(没有/project-name开头):例如:jekyll serve --baseurl ''

这样,您可以从 localhost 上的站点根目录在本地预览您的站点,但是当 GitHub 从 gh-pages 分支生成您的页面时,所有 URL 都将以正确开头/project-name并正确解析。

于 2014-01-29T20:19:01.947 回答
2

在最新版本的 jekyll (1.1.2) 中,我发现最好从原始版本创建一个单独的配置文件。唯一的区别?url(或 baseurl 变量)。

默认的 _config.yml 有:

url: myurl.com

新配置(我们称之为 _preview_config.yml):

url: localhost:4000

这将根据您使用的配置重新分配所有绝对链接。现在使用预览配置运行服务器:

jekyll serve -w --config _preview_config.yml

完整的解释在我的博客上

于 2013-09-02T20:35:26.757 回答
0

我使用 jekyll-bootstrap 并在端口 4000 上本地部署,但我的 github 页面 url 是 user.github.com ...我认为这取决于您最初创建 repo 的方式。最初我使用了 github 提供的自动页面构建器,它以非常类似于向导的方式创建了 repo。

我只是按照以下步骤操作:

http://jekyllbootstrap.com/

希望有帮助

于 2013-01-15T03:05:28.753 回答