私の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 }}
を使用する方法はありますか?
これは、異なるJekyll環境間の一般的な問題です。
site.url
およびsite.baseurl
を理解する必要があり、どの状況でそれらが必要かを理解する必要があります。これらの変数は同じ目的を果たしません。
site.url
デフォルトでは、この変数はcanonical
ヘッダーとRSS link
のページヘッドでのみ使用されます。このフィードを管理するソフトウェアはリソースのURLを認識しないため、サイトリソースを指すためにxmlフィードでも使用されます。
この変数は外部システムにのみ必要です。
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
はこれらの環境のいずれかですぐに動作しない場合があります。
ここに2つの解決策があります:
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
を使用します。