我用寫文建站把寫作和版式留在一般檔案裡。文章寫 Markdown,首頁和專案頁寫 JSON 版面,建置後得到 dist/ 裡的靜態 HTML 與本地資源。日常發一篇文章,不需要為網站維護資料庫。

先讓專案執行起來

使用目前原始碼儲存庫時,準備 Node.js 22.12 或更新版本,在專案根目錄執行:

npm ci
npm run new -- post "A quiet afternoon"
npm run dev

新增指令會印出產生的檔案路徑。用編輯器開啟它,保留兩道 --- 之間的中繼資料,在第二道分隔線後寫正文。預覽會在儲存原始檔後重新建置;建立文章時用一次指令,之後就在編輯器裡修改。

若要開始一個新站,使用本站固定的已發布 GitHub 原始碼版本,在空目錄裡初始化:

mkdir my-site
cd my-site
npm install edgepress@https://codeload.github.com/jsw-teams/edgepress/tar.gz/ac42e0046d022a318e4eef21e56e2e459584b2a5 --save-exact
npx edgepress init
npm install

npm 發布版本可能與 GitHub 最新原始碼不同。站點的依賴版本和鎖定檔應一起保留;已經透過依賴使用寫文建站的網站,繼續用自己的 npm 指令碼,不必再全域安裝一份。

分清要改哪個檔案

config.yml                    (site, theme, privacy, consent services)
edgepress.config.mjs           (paths, locales, permalink, build plugins)
content/posts/<post-id>/en.md   (article metadata + Markdown)
content/pages/<page-id>/en.json   (page metadata + rows and elements)
content/assets/images/walk.jpg (published as /images/walk.jpg)
themes/<name>/                 (shared layouts and visual styles)
dist/                         (generated output)

站名、標準網址、導覽、頁尾和隱私資訊放在 config.yml;建置路徑、啟用語言與文章路徑格式放在 edgepress.config.mjs。語言檔名用小寫:頁面用 en.json、zh-cn.json,文章用 en.md、zh-cn.md,lang 要符合已啟用的語言。每篇文章或每個頁面有自己的目錄,譯文放在同一個目錄裡。

寫一篇文章

---
title: A quiet afternoon
date: 2026-10-11T10:00:00+08:00
lang: en
category: blog
tags: [walk, photography]
---

We stopped by the water.

## A small detail

![Reflections by the shore](/images/walk.jpg)

指令會填入目前時間和站點語言,上面只是檔案結構範例。佈景主題已經顯示文章標題,正文從段落開始,章節用 ##,不用再放一個同名一級標題。照片先儲存到 content/assets/images/walk.jpg,再用 /images/walk.jpg 引用。

一個 category 決定文章歸屬。本站的 blog、uncategorized 進入見聞觀點,edgepress、ishare、iask、media-viewer 進入產品筆記。tags 用來描述文章,不決定首頁清單。

從外往裡看一個頁面

頁面(列清單)→ 列(欄數,儲存格清單)→ 儲存格(依序排列的元素)→ 元素(類型,內容)。下面是一份完整的雙欄頁面:

{
  "title": "Project notes",
  "lang": "en",
  "slug": "notes",
  "blocks": [
    {
      "columns": 2,
      "cells": [
        [
          {
            "type": "heading",
            "level": 2,
            "text": "What I am making"
          },
          {
            "type": "text",
            "text": "A small tool for everyday writing."
          }
        ],
        [
          {
            "type": "post-list",
            "title": "Notes",
            "category": "edgepress",
            "count": 3
          }
        ]
      ]
    }
  ]
}

儲存為 content/pages/notes/en.json。中繼資料與 blocks 同在一個 JSON 物件裡,不加 YAML 分隔線,也不寫 Markdown 內文。VS Code 能識別並折疊 blocks、每一列、cells、每個儲存格與元素;本機 $schema 提供欄位說明與結構檢查。columns: 2 對應兩個儲存格陣列,元素依序顯示。section 的 blocks 放子元素,長段落用 paragraphs,程式碼字串內換行用 \n。舊 Markdown/YAML 頁面仍可建置,同一頁面的每種語言只保留一種格式。

預覽之後再發布

npm run build 驗證並產生網站,npm run check 把頁面報告寫入 tools/reports/。本地檢查首頁、文章、語言連結和手機版面,再把 dist/ 交給既有託管與部署流程。產生的 HTML 是結果;需要修正時,回到原始檔裡修改。

佈景主題二次開發 · 可選省流設定 · 專案與快速入門