Це загальна проблема між різними середовищами 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.
site.urlдля додавання ресурсів css / js. Це погана ідея? Чи слід змінити все наsite.baseurlта використовуватиsite.urlлише для канонічного посилання та стрічки xml?