【问题标题】:How to detemine if jekyll running locally or in production site?如何确定 jekyll 是在本地运行还是在生产站点运行?
【发布时间】:2013-05-21 21:55:08
【问题描述】:

jekyll 中有一个名为 production_url 的配置参数。我找不到有关如何使用它的任何信息。

理想情况下,我希望能够在使用 serve 参数运行时生成带有本地 URL 的永久链接,并在使用 build 参数运行时使用生产 URL 生成永久链接。

我该怎么做?

【问题讨论】:

  • 为什么不能使用相对链接?

标签: jekyll


【解决方案1】:

当您构建 Jekyll 网站时,可以使用 JEKYLL_ENV 环境变量指定它用于构建的环境:

$ JEKYLL_ENV=production jekyll build

如果您没有明确设置JEKYLL_ENV,则默认为开发。

{% if jekyll.environment == "production" %}
    // Production environment.
{% endif %}

Github Pages 自动将环境设置为生产环境。

【讨论】:

  • 请注意,Netlify 不会自动设置它;您需要将其添加到 Site Settings → Build and Deploy → Environment
【解决方案2】:

我在当前版本 (v1.4.1) 中没有看到变量 production_url,所以这可能是一个过时的问题——但我自己只是在寻找这个答案。有一个 baseurl 属性可以设置一个标志,从而更改文件的路径,但它只调整相对路径。

jekyll serve --baseurl '/blog'

你可以做的是使用 -config 选项来指定一个用于开发的配置文件。

Jekyll Documentation

您的生产配置变量在 _config.yml 中定义。一种选择是为开发创建一个单独的配置文件。

--config _config-dev.yml

您也可以(和我一样)覆盖在第二个配置文件中定义的变量。

--config _config.yml,_config-dev.yml

如果您将液体模板用于这样的网站链接:

<link rel="stylesheet" href="{{ site.base_url }}/stylesheets/blog.css">

然后您可以在本地开发期间覆盖 base_url 属性

base_url:           http://localhost:4000

并在“开发”中运行 jekyll

jekyll serve -w --config _config.yml,_config-dev.yml

【讨论】:

  • 使用覆盖配置文件的好主意。我创建了一个 _config-dev.yml 覆盖文件,将“mode:development”放入其中,它可以完美地定义我何时处于开发模式。谢谢!
【解决方案3】:

jekyll serve 将调用jekyll build,因此您不能真正使用这两者来输出不同的 URL 方案。

我构建了一个 Jekyll 插件,它使用 Liquid Filter 和一个名为 mode_config.yml 中的用户定义变量。

您将 mode 设置为 developmentproduction,插件会处理您模板中的其余部分。

因此,在您的模板中,您可以有一个 URL,例如:

<img src="{{ '/img/dog.jpg' | to_absurl }}" />

mode 处于开发中时,Jekyll 构建/服务后您将获得一个相对 URL:

<img src="/img/dog.jpg" />

在本地,这将被访问为:http://0.0.0.0:4000/img/dog.jpg

mode 生产时,在 Jekyll 构建/服务时,您将获得一个绝对 URL:

<img src="http://www.domain.tld/img/dog.jpg" />

http://www.domain.tld 是您在 _config.yml 中设置的 -> url 变量。

您可以在此处查看有关插件的更多详细信息:

http://jhaurawachsman.com/2013/jekyll-url-helper-filter-plugin/

【讨论】:

  • 这相当复杂。 Tomsy64 检查 jekyll.environment == "production" 的答案非常好,而且很干净。
【解决方案4】:

这也对我有用:

$ JEKYLL_ENV=production jekyll serve

【讨论】:

  • 如果您在 netlify.toml 中定义自定义 build.command,例如sh netlify.sh,然后您可以按照JEKYLL_ENV=... 的建议轻松添加 jekyll 命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2011-06-15
相关资源
最近更新 更多