快速開始

本頁內容

本指南將帶你完成建立第一個 EmDash 網站的全過程,從安裝到發佈第一篇文章。

前置需求

  • Node.js v22.12.0 或更高版本(不支援奇數版本號)
  • npmpnpmyarn
  • 程式碼編輯器(建議使用 VS Code)

建立新專案

npm

npm create emdash@latest

pnpm

pnpm create emdash@latest

yarn

yarn create emdash

按照提示為專案命名並設定你的偏好。

啟動開發伺服器

  1. 進入專案目錄:

    cd my-emdash-site
  2. 安裝相依套件:

    npm install
  3. 啟動開發伺服器:

    npm run dev
  4. 在瀏覽器中開啟 http://localhost:4321

完成設定精靈

當你第一次存取管理面板時,EmDash 的設定精靈會引導你完成初始設定:

  1. 存取 http://localhost:4321/_emdash/admin

  2. 你會被重新導向到設定精靈。輸入:

    • Site Title — 網站名稱
    • Tagline — 簡短描述
    • Admin Email — 你的電子郵件地址
  3. 點選 Create Site 來註冊通行金鑰

  4. 瀏覽器會提示你使用 Touch ID、Face ID、Windows Hello 或安全金鑰建立通行金鑰

通行金鑰註冊完成後,你將登入並被重新導向到管理控制台。

EmDash 管理控制台,顯示內容概覽、最近活動和導覽側邊欄

第一篇文章

  1. 在管理側邊欄中,點選 Content 下的 Posts

  2. 點選 New Post

  3. 輸入標題,並使用富文字編輯器編寫內容。

    EmDash 文章編輯器,帶有富文字工具列和發佈側邊欄
  4. 將狀態設定為 Published 並點選 Save

  5. 造訪網站首頁。文章會立即顯示。

專案結構

你的 EmDash 專案遵循標準的 Astro 結構,並有一些額外內容:

my-emdash-site/
├── astro.config.mjs      # Astro + EmDash 設定
├── src/
│   ├── live.config.ts    # 即時集合設定
│   ├── pages/
│   │   ├── index.astro   # 首頁
│   │   └── posts/
│   │       └── [...slug].astro  # 動態文章頁面
│   ├── layouts/
│   │   └── Base.astro    # 基礎版面配置
│   └── components/       # 你的 Astro 元件
├── .emdash/
│   ├── seed.json         # 範本種子檔案
│   └── types.ts          # 產生的 TypeScript 型別
└── package.json

設定檔

astro.config.mjs

以下設定將 EmDash 註冊為 Astro 整合,使用本機 SQLite 資料庫和本機檔案儲存:

import { defineConfig } from "astro/config";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({
				directory: "./uploads",
				baseUrl: "/_emdash/api/media/file",
			}),
		}),
	],
});

src/live.config.ts

以下檔案透過單一即時集合將 EmDash 連接到 Astro 的內容系統:

import { defineLiveCollection } from "astro:content";
import { emdashLoader } from "emdash/runtime";

export const collections = {
	_emdash: defineLiveCollection({ loader: emdashLoader() }),
};

環境變數

對於正式環境,使用以下指令為外掛程式密鑰產生加密金鑰:

npx emdash secrets generate

將產生的值作為 EMDASH_ENCRYPTION_KEY 新增到環境中,如下所示。此金鑰用於加密靜態儲存的外掛程式密鑰。現在設定它,這樣當外掛程式密鑰加密使用它時,你的部署就準備好了。

EMDASH_ENCRYPTION_KEY=emdash_enc_v1_...

金鑰永遠不會儲存在資料庫中——只儲存加密的密文。將它備份到持久位置,因為遺失它意味著遺失所有用它加密的密鑰。

預覽 HMAC 密鑰和留言者 IP 雜湊鹽在首次使用時產生並儲存在資料庫中,因此無需設定。僅當獨立程序需要驗證與主站點相同的權杖時,才覆蓋預覽密鑰,如下所示。

EMDASH_PREVIEW_SECRET=your-preview-secret

在頁面中查詢內容

在 Astro 頁面中使用 EmDash 的查詢函式。這些函式遵循 Astro 的即時集合模式,對於集合傳回 { entries, error },對於單一條目傳回 { entry, error }

---
import { getEmDashCollection } from "emdash";
import Base from "../layouts/Base.astro";

const { entries: posts } = await getEmDashCollection("posts");
---

<Base title="Home">
  <h1>最新文章</h1>
  <ul>
    {posts.map((post) => (
      <li>
        <a href={`/posts/${post.slug}`}>{post.data.title}</a>
      </li>
    ))}
  </ul>
</Base>

以下頁面透過 slug 取得單一條目:

---
import { getEmDashEntry } from "emdash";

const { slug } = Astro.params;
const { entry: post } = await getEmDashEntry("posts", slug);

if (!post) {
  return Astro.redirect("/404");
}
---

<h1>{post.data.title}</h1>

產生 TypeScript 型別

為了獲得完整的型別安全,從資料庫結構描述產生型別:

npx emdash types

這會建立包含所有集合介面的 .emdash/types.ts。編輯器現在會自動補全欄位名稱並捕捉型別錯誤。

下一步

網站執行後,以下頁面介紹接下來要做什麼: