在jekyll本地开发过程中将site.url更改为localhost


75

我的jekyll博客模板具有指向资源和页面的链接,如下所示:

{{ site.url }}/my-page.html

这在部署中效果很好,但是当我jekyll serve在开发中运行时,所有链接都指向实时页面,而不是开发页面。

my-site-url/my-page.html

# But I want this in development
localhost:4000/my-page.html

有没有办法让jekyll{{ site.url }}在开发中使用不同的东西?

Answers:


122

这是不同的Jekyll环境之间的常见问题。

一些解释

我们需要了解site.urlsite.baseurl在什么情况下需要它们。这些变量的作用不同。

site.url

默认情况下,此变量仅在canonical页眉和页眉中使用RSS link。xml提要中还使用它来指向站点资源,因为将管理该提要的软件不知道资源的url。

该变量仅对于外部系统是必需的。

site.baseurl

此变量指示您的Jekyll站点的根文件夹。默认情况下,它设置为""(空字符串)。这意味着您的Jekyll网站位于的根http://example.com

如果您的Jekyll网站位于http://example.com/blog,则必须设置site.baseurl/blog请注意斜杠)。这将允许资产(css,js)正确加载。

看看您的头中如何装载资产:

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

也可以是:

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

在不同的环境中工作

现在,您必须在本地测试您的站点并将其部署到生产环境中。有时,它们baseurl是不同的,并且在jekyll build这些环境之一中可能无法立即使用。

这里我们有两个解决方案:

采用 jekyll serve

假设您的网站位于github存储库中,并在处提供服务https://username.github.io/myProject

您可以将设置baseurl/myProject。并使用本地测试您的网站jekyll serve,您的网站将在提供http://127.0.0.1:4000/myProject/

使用多个配置文件

如果由于某种原因而不能使用jekyll serve,则可以为两种环境以及jekyll build要部署的位置设置配置文件。

假设我们有的本地站点http://localhost和的生产站点https://username.github.io/myProject

我们离开_config.ymlurl: https://username.github.iobaseurl: /myProject

我们_config_dev.yml用onlyurl: https://localhostbaseurl: ""

现在要在本地测试:

jekyll build --config _config.yml,_config_dev.yml

要么

jekyll build --config _config.yml,_config_dev.yml --watch

在正式投入生产时,该jekyll build命令将使用默认值_config.yml


1
出于某些原因,我下载了一个预制的jekyll主题,用于site.url添加css / js资源。这是一个坏主意吗?我应该将所有内容都更改为site.baseurl,并且site.url仅用于规范链接和xml feed吗?
海森堡2014年

2
当然 !{{site.baseurl}}/asset资产和{{site.url}}/{{site.baseurl}}/ressource外部需求。也许您可以批准我的回答。
David Jacquel 2014年

1
也许{{ site.url }}{{ site.baseurl }}相反,因为site.baseurl已经有了一个前置的斜杠?
海森堡2014年

您绝对正确,是{{ site.url }}{{ site.baseurl }}
David Jacquel 2014年

但是为什么它不附加/blog到发布URL?我仍然收到像这样的帖子的损坏的URL /2014/12/12/mypost-name。由于我在博客文件夹中拥有所有内容,因此实际上断开了链接。
费扎尔汗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.