如何判断jekyll是在本地运行还是在生产站点运行?

hus*_*ayt 14 jekyll

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

理想情况下,我希望能够在使用serveparam 运行时使用本地URL生成永久链接,并在使用param 运行时使用生产URL 生成永久链接build.

我怎么能这样做?

小智 25

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

$ JEKYLL_ENV=production jekyll build
Run Code Online (Sandbox Code Playgroud)

如果未JEKYLL_ENV明确设置,则默认为开发.

{% if jekyll.environment == "production" %}
    // Production environment.
{% endif %}
Run Code Online (Sandbox Code Playgroud)

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


kin*_*ple 24

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

jekyll serve --baseurl '/blog'
Run Code Online (Sandbox Code Playgroud)

您可以做的是使用-config选项指定用于开发的配置文件.

Jekyll文档

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

--config _config-dev.yml
Run Code Online (Sandbox Code Playgroud)

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

--config _config.yml,_config-dev.yml
Run Code Online (Sandbox Code Playgroud)

如果您使用液体模板进行网站链接,请执行以下操作:

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

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

base_url:           http://localhost:4000
Run Code Online (Sandbox Code Playgroud)

并在"开发"中运行jekyll

jekyll serve -w --config _config.yml,_config-dev.yml
Run Code Online (Sandbox Code Playgroud)


J W*_*J W 4

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

我构建了一个 Jekyll 插件,它使用液体过滤器和您调用_config.ymlmode.

您将其设置mode开发生产,插件会处理模板中的其余部分。

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

<img src="{{ '/img/dog.jpg' | to_absurl }}" />
Run Code Online (Sandbox Code Playgroud)

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

<img src="/img/dog.jpg" />
Run Code Online (Sandbox Code Playgroud)

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

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

<img src="http://www.domain.tld/img/dog.jpg" />
Run Code Online (Sandbox Code Playgroud)

这是您在->变量http://www.domain.tld中设置的内容。_config.ymlurl

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

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