我的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.yml与url: https://username.github.io和baseurl: /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.