在jekyll本地开发期间将site.url更改为localhost

我的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 

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

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

一些解释

我们需要了解site.urlsite.baseurl以及我们在哪种情况下需要它们。 这些variables不能达到同样的目的。

site.url

默认情况下,这个variables只在canonical头和RSS link页头中使用。 它也被用在xml提要中指向站点资源,因为pipe理这个提要的软件不知道资源的URL。

这个variables只对外部系统是必需的。

site.baseurl

这个variables表明你的Jekyll站点的根文件夹。 默认情况下它被设置为"" (空string)。 这意味着您的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"> 

在不同的环境中工作

现在,您必须在本地testing您的站点并将其部署到生产环境中。 有时, baseurl是不同的,在这样的环境之一, baseurl jekyll build可能不能在箱子外面工作。

这里我们有两个解决scheme:

使用jekyll serve

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

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

使用多个configuration文件

如果由于某种原因,您无法使用jekyll serve ,则可以根据您部署的位置为环境和jekyll build设置configuration文件。

假设我们在http://localhost上提供了本地站点,在https://username.github.io/myProject上提供了生产站点。

我们离开_config.ymlurl: https://username.github.io baseurl: /myProjectbaseurl: /myProject

我们只用url: https://localhost创build一个新的_config_dev.yml url: https://localhostbaseurl: ""

现在在本地testing:

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

要么

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

在生产中推送时, jekyll build命令将使用默认的_config.yml