hyperlink - permalink - {% for post in site posts %}



Ändern Sie site.url während der lokalen Entwicklung von jekyll in localhost (1)

Dies ist ein häufiges Problem zwischen verschiedenen Jekyll-Umgebungen.

Einige Erklärungen

Wir müssen site.url und site.baseurl verstehen und in welcher Situation wir sie brauchen. Diese Variablen dienen nicht dem gleichen Zweck.

site.url

Standardmäßig wird diese Variable nur im Seitenkopf für den canonical Header und den RSS link . Es wird auch im XML-Feed verwendet, um auf Site-Ressourcen zu verweisen, da die Software, die diesen Feed verwaltet, die URLs der Ressourcen nicht kennt.

Diese Variable wird nur für externe Systeme benötigt.

site.baseurl

Diese Variable gibt den Stammordner Ihrer Jekyll-Site an. Standardmäßig ist "" (leere Zeichenfolge) eingestellt. Dies bedeutet, dass sich Ihre Website in Jekyll im Stammverzeichnis von http://example.com .

Wenn sich Ihre Jekyll-Site in http://example.com/blog , müssen Sie site.baseurl auf /blog ( Schrägstrich beachten ). Dadurch können Assets (CSS, JS) korrekt geladen werden.

Sehen Sie, wie Assets in Ihrem Kopf geladen werden:

<link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">

das kann auch sein:

<link rel="stylesheet" href="{{ site.baseurl }}/css/main.css">

Arbeiten in verschiedenen Umgebungen

Jetzt müssen Sie Ihre Site lokal testen und in der Produktion bereitstellen. Manchmal ist der baseurl anders und der jekyll build funktioniert in einer dieser Umgebungen möglicherweise nicht jekyll build .

Hier haben wir zwei Lösungen:

Mit jekyll serve

Stellen Sie sich vor, Ihre Site befindet sich in einem Github-Repository und wird unter https://username.github.io/myProject bereitgestellt.

Sie können die baseurl zu /myProject . und testen Sie Ihre Site lokal mit jekyll serve . Ihre Site wird unter http://127.0.0.1:4000/myProject/ jekyll serve

Verwenden Sie mehrere Konfigurationsdateien

Wenn Sie aus dem einen oder anderen Grund jekyll serve nicht verwenden jekyll serve , können Sie eine Konfigurationsdatei für die Umgebung und für jekyll build je nachdem, wo Sie sie jekyll build .

Nehmen wir an, wir haben die lokale Site unter http://localhost und die Produktionssite unter https://username.github.io/myProject .

Wir verlassen die _config.yml mit url: https://username.github.io und baseurl: /myProject

Wir erstellen eine neue _config_dev.yml mit nur url: https://localhost und baseurl: ""

Jetzt vor Ort testen:

jekyll build --config _config.yml,_config_dev.yml

oder

jekyll build --config _config.yml,_config_dev.yml --watch

Wenn der Befehl jekyll build für die Produktion jekyll build wird der Standardwert _config.yml .

Meine Jekyll-Blog-Vorlage enthält Links zu Ressourcen und Seiten wie folgt:

{{ site.url }}/my-page.html

Dies funktioniert gut in der Bereitstellung, aber wenn ich jekyll serve in der Entwicklung ausführe, jekyll serve alle Links auf die Live-Seite anstatt auf die Entwicklungsseite.

my-site-url/my-page.html

# But I want this in development
localhost:4000/my-page.html

Gibt es eine Möglichkeit, Jekyll dazu zu bringen, eine andere {{ site.url }} in der Entwicklung zu verwenden?