Jekyll 在某些机器上创建绝对路径

Jekyll creates absolute paths on some machines

我们使用 Jekyll 4.2.0 生成一个静态 HTML 站点,我们使用 jekyll serve 为调试目的服务。在我的机器上(Arch Linux),这工作正常但在我同事的机器上(Arch Linux 和 Mac OS),Jekyll 错误地生成了绝对路径,例如本地站点上的图像链接指向例如https://ourdomain//public/image.png 而不是 http://localhost:4000//public/image.png.

链接定义为例如{{site.url}}{{ site.baseurl}}/public/img.png

如何让 Jekyll 在我同事的机器上保持本地路径完整?

解决方案

问题已被@Kin 解决,但我不得不进行两次修改

  1. 图片路径使用单引号,否则会和外面的双引号冲突
  2. 使用 relative_url 代替 relative

最后的结果是<img src="{{ '/public/img.png' | relative_url }}">.

为什么它在不同机器上的工作方式不同

通过在调用 jekyll serve --incremental 之前删除 _site 文件夹实现了相同的行为,因为之前使用了相对路径并且 jekyll serve 似乎只更新了站点的某些部分。 然后,原来的 {{site.url}}{{ site.baseurl}}/public/img.png 实际上在任何情况下都指定了一个绝对路径,因为 site.url 似乎从 _config.yml 中获取了硬编码的 url 属性,而不是神奇地将这个值设置为已部署的符合我预期的网页本地 URI。

我最初使用 site.urlsite.baseurl 的原因是我还使用 github 页面部署到域的子文件夹中,但该用例由 relative_url 还有。

更新OP的解决方案

问题已通过对图像 [2]

使用 relative_url 解决

[2]https://jekyllrb.com/docs/liquid/filters/

原版Post

在我过去的 Jekyll 项目[1]中,我们能够在各种平台上毫无问题地使用 jekyll serve。我们有可能通过在所有图像 URL 上使用 relative [1] 来避免您看到的问题。这是一个例子

<img id="myImage" src="{{ "/img/myImage.png" | relative }}" alt="My Image">

我没有尝试重现您的问题,所以我无法确认 relative 是否让我们的 Jekyll 项目跨平台兼容。

[1] https://github.com/OpenLiberty/openliberty.io