-
Notifications
You must be signed in to change notification settings - Fork 0
4. Operations
Site operations は次の通り:
Siteのフォルダーとファイル構成は意味ある。基本、Lumeはdeno.jsonと_config.tsファイルで起動しています。
まず、deno.jsonは、Denoに関する設定(Lume / Lume CMSのバージョンどれを使うか)とDeno のタスク定義(いわゆるマクロ)が入っています。また、_config.tsは色んなソフトを引っ張ってきて(Lume、Lume CMSやPluginなど)、ビルド前後で実行するスクリップトも定義する(サイトファイルのZIP、何らかのデータをAPIから引っ張ってくる)。
Lumeプラグインにて、普段面倒な手作業を自動にしてくれる。例えば:
- feed - RSSフィードを立てる
- sitemap -
sitemap.xml組み込んでくれる - lightningcss - より多くのブラウザーで動作出来るようCSSオプティマイズしてくれる
- metas -
<head>にtitle,description,ogなど足してくれる - picture / transform images - 一つの画像から
src-setバリアントを作ってくれる - brotli -
htmlやcssを圧縮して、結果index.htmlもindex.html.brがサイトファイルに出来る - phosphor - 使い安いアイコンを用意してくれる (/about/に使ってみた)
サイトビルドする時、上記プラグインを使ってLumeが_site書き込みます。
Deno Deploy https://deno.com/deploy にホスティングしています。ログインするのに、Githubユーザーとパスを使います。
ログイン後、プロジェクトの一覧があり、Gitのリポに結びついていることが解ります。
プロジェクトルートにある、serve.tsが、ウェブサーバーとして、Deployが使ってくれる。Deployのプロジェクトを作る時、Entry Pointを、そのファイルに指定すると、動作してくれる。
公開は、mainブランチにプッシュするのみ。GitHubがそこでアクションを実行して、Deno Deployに渡す。Deployが、そこからアップしてくれる。
Ventoテンプレートの利用によって、if/thenやforを可能にしてくれます。例えば、存在しているページをループして、各ページに<li>を作り、ページの一覧を作成する。当サイトでは、このようなテクニックを使って、トップページの画像グリッドを作ります。次のコードに、{{ for ... や {{ if ... を見かける:
{{ for item of search.pages(`type=showcase`, "order=asc") }}
<div class="fl w-100 w-50-m w-25-l pv3 pa3-m pa4-l">
{{ if !item.hidelink }}<a href="{{ item.url }}" target="_blank">{{ /if }}
<div class="aspect-ratio aspect-ratio--3x4 shadow-1 br1">
<span style="background-image:url({{ item.indeximage }});" class="dt cover bg-center aspect-ratio--object grow-large hide-child br1">
<span class="white dtc v-mid w-100 h-100 child bg-black-40 pa5 br1"><em><span class="bg-white-40">{{ item.category }}
{{if item.url.includes("/private/")}}
<span class="dark-red"> {{ "lock-laminated" |> phosphor("duotone") }}{{ "password" |> phosphor("duotone") }}</span>
{{/if}}
</span><br>{{ item.indextitle }}</em></span>
</span>
</div>
{{ if !item.hidelink }}</a>{{ /if }}
</div>
{{ /for }}
サイトのビルド段取りはこちら:
- 編集して、何時ものようにmainブランチに
git commit/git pushをする。 - リポのGithub Action
deploy.ymlがmainにプッシュがあると実行され、リポのgit cloneをして、リポをGithubのビルドサーバにコピーして、Deno Deployプロジェクトに渡す。 - Deno Deploy がファイルを受け、エントリーポイントが
serve.tsになっているので、それをウェブサーバーとして実行する。 - ビジターがドメインにアクセスして、Deno Deploy が
serve.ts経由でファイルを表示する。