Mon modèle de blog jekyll contient des liens vers des ressources et des pages comme ceci:
{{ site.url }}/my-page.html
Cela fonctionne bien dans le déploiement, mais lorsque j'exécute jekyll serve
en cours de développement, tous les liens pointent vers la page en direct au lieu de la page de développement.
my-site-url/my-page.html
# But I want this in development
localhost:4000/my-page.html
Existe-t-il un moyen de faire utiliser jekyll un autre {{ site.url }}
en développement?
Il s'agit d'un problème courant entre différents environnements Jekyll.
Nous devons comprendre site.url
et site.baseurl
et dans quelle situation nous en avons besoin. Ces variables n'ont pas le même objectif.
site.url
Par défaut, cette variable n'est utilisée qu'en tête de page pour l'en-tête canonical
et le RSS link
. Il est également utilisé dans le flux xml pour pointer vers les ressources du site, car le logiciel qui gérera ce flux ne connaît pas les URL des ressources.
Cette variable n'est nécessaire que pour les systèmes externes.
site.baseurl
Cette variable indique le dossier racine de votre site Jekyll. Par défaut, il est défini sur ""
(chaîne vide). Cela signifie que votre site Jekyll est à l'origine de http://example.com
.
Si votre site Jekyll vit dans http://example.com/blog
, vous devez définir site.baseurl
à /blog
(notez la barre oblique). Cela permettra aux ressources (css, js) de se charger correctement.
Voyez comment les actifs sont chargés dans votre tête:
<link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
cela peut aussi être:
<link rel="stylesheet" href="{{ site.baseurl }}/css/main.css">
Vous devez maintenant tester votre site localement et le déployer en production. Parfois, le baseurl
est différent et le jekyll build
peut ne pas fonctionner par défaut dans l'un de ces environnements.
Ici, nous avons deux solutions:
jekyll serve
Imaginons que votre site réside dans un référentiel github et soit servi à https://username.github.io/myProject
.
Vous pouvez configurer le baseurl
sur /myProject
. et testez votre site localement avec jekyll serve
, votre site sera diffusé à http://127.0.0.1:4000/myProject/
Si, pour une raison ou une autre, vous ne pouvez pas utiliser jekyll serve
, vous pouvez définir un fichier de configuration pour l'environnement et jekyll build
selon l'endroit où vous déployez.
Supposons que le site local soit desservi à http://localhost
et le site de production desservi à https://username.github.io/myProject
.
Nous quittons le _config.yml
avec url: https://username.github.io
et baseurl: /myProject
Nous créons un nouveau _config_dev.yml
avec seulement url: https://localhost
et baseurl: ""
Maintenant pour tester localement:
jekyll build --config _config.yml,_config_dev.yml
ou
jekyll build --config _config.yml,_config_dev.yml --watch
Lorsque poussé sur la production, le jekyll build
la commande utilisera la valeur par défaut _config.yml
.