【发布时间】:2013-05-21 21:55:08
【问题描述】:
jekyll 中有一个名为 production_url 的配置参数。我找不到有关如何使用它的任何信息。
理想情况下,我希望能够在使用 serve 参数运行时生成带有本地 URL 的永久链接,并在使用 build 参数运行时使用生产 URL 生成永久链接。
我该怎么做?
【问题讨论】:
-
为什么不能使用相对链接?
标签: jekyll
jekyll 中有一个名为 production_url 的配置参数。我找不到有关如何使用它的任何信息。
理想情况下,我希望能够在使用 serve 参数运行时生成带有本地 URL 的永久链接,并在使用 build 参数运行时使用生产 URL 生成永久链接。
我该怎么做?
【问题讨论】:
标签: jekyll
当您构建 Jekyll 网站时,可以使用 JEKYLL_ENV 环境变量指定它用于构建的环境:
$ JEKYLL_ENV=production jekyll build
如果您没有明确设置JEKYLL_ENV,则默认为开发。
{% if jekyll.environment == "production" %}
// Production environment.
{% endif %}
Github Pages 自动将环境设置为生产环境。
【讨论】:
我在当前版本 (v1.4.1) 中没有看到变量 production_url,所以这可能是一个过时的问题——但我自己只是在寻找这个答案。有一个 baseurl 属性可以设置一个标志,从而更改文件的路径,但它只调整相对路径。
jekyll serve --baseurl '/blog'
你可以做的是使用 -config 选项来指定一个用于开发的配置文件。
您的生产配置变量在 _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
【讨论】:
jekyll serve 将调用jekyll build,因此您不能真正使用这两者来输出不同的 URL 方案。
我构建了一个 Jekyll 插件,它使用 Liquid Filter 和一个名为 mode 的 _config.yml 中的用户定义变量。
您将 mode 设置为 development 或 production,插件会处理您模板中的其余部分。
因此,在您的模板中,您可以有一个 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/
【讨论】:
这也对我有用:
$ JEKYLL_ENV=production jekyll serve
【讨论】:
netlify.toml 中定义自定义 build.command,例如sh netlify.sh,然后您可以按照JEKYLL_ENV=... 的建议轻松添加 jekyll 命令。