Змініть site.url на localhost під час локального розвитку джекілу


75

Мій шаблон блогу jekyll містить посилання на ресурси та сторінки приблизно так:

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

Це добре працює при розгортанні, але коли я запускаю jekyll serveрозробку, усі посилання вказують на сторінку, що працює, замість сторінки розробки.

my-site-url/my-page.html

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

Чи є спосіб змусити джекіл використовувати інший {{ site.url }}у розробці?

Відповіді:


122

Це загальна проблема між різними середовищами 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 }}">

це також може бути:

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

Робота в різних середовищах

Тепер ви повинні протестувати свій сайт локально та розгорнути його у виробництві. Іноді все 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

або

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

При натисканні на виробництво jekyll buildкоманда використовуватиме типове значення _config.yml.


1
З деяких причин попередньо створена тема jekyll, яку я завантажив, використовується site.urlдля додавання ресурсів css / js. Це погана ідея? Чи слід змінити все на site.baseurlта використовувати site.urlлише для канонічного посилання та стрічки xml?
Гайзенберг,

2
Звичайно ! {{site.baseurl}}/assetдля активів та {{site.url}}/{{site.baseurl}}/ressourceдля зовнішніх потреб. І, можливо, ви можете схвалити мою відповідь.
David Jacquel

1
Можливо, {{ site.url }}{{ site.baseurl }}натомість, оскільки site.baseurlвже має наперед очікувану скісну риску?
Гайзенберг,

Ви абсолютно праві, це так {{ site.url }}{{ site.baseurl }}.
Девід Жакел,

Але чому це не додається /blogдо URL-адреси публікації? Я все ще отримую недійсну URL-адресу публікації, наприклад /2014/12/12/mypost-name. Це насправді розірвало посилання, оскільки у мене все є всередині папки блогу.
Fizer Khan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.