Измените site.url на localhost во время развития jekyll

В моем шаблоне блога 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

Есть ли способ заставить jekyll использовать другой {{ site.url }} в разработке?

Ответ 1

Это обычная проблема между различными средами 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.