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

Hei*_*erg 72 hyperlink jekyll

我的jekyll博客模板包含资源和页面的链接,如下所示:

{{ site.url }}/my-page.html
Run Code Online (Sandbox Code Playgroud)

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

my-site-url/my-page.html

# But I want this in development
localhost:4000/my-page.html
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*uel 113

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

一些解释

我们需要了解site.url并且site.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 }}">
Run Code Online (Sandbox Code Playgroud)

也可以是:

<link rel="stylesheet" href="{{ site.baseurl }}/css/main.css">
Run Code Online (Sandbox Code Playgroud)

在不同的环境中工作

现在,您必须在本地测试您的站点并将其部署到生产环境中.有时,它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只用url: https://localhost和创造一个新的baseurl: ""

现在在本地测试:

jekyll build --config _config.yml,_config_dev.yml
Run Code Online (Sandbox Code Playgroud)

要么

jekyll build --config _config.yml,_config_dev.yml --watch
Run Code Online (Sandbox Code Playgroud)

按下生产时,该jekyll build命令将使用默认值_config.yml.

  • 当然 !资产的`{{site.baseurl}}/asset`和外部需求的`{{site.url}}/{{site.baseurl}}/ressource`.也许你可以批准我的答案. (2认同)
  • 也许是“{{ site.url }}{{ site.baseurl }}”,因为“site.baseurl”已经有一个前置斜杠了? (2认同)