架构

本页内容

EmDash 是一个 Astro 集成。你将它添加到 astro.config.mjs,选择数据库和存储,并定义内容集合。本页面介绍构建站点所需的模型。关于内部实现(表布局、请求路径、代码生成),请参阅架构(内部)

EmDash 为你的站点添加什么

┌──────────────────────────────────────────────┐
│                你的 Astro 站点                 │
│                                               │
│   你编写的页面和组件                           │
│        │                                      │
│        │  getEmDashCollection() / getEmDashEntry()
│        ▼                                      │
│   ┌───────────────┐      ┌────────────────┐   │
│   │   内容        │      │  管理面板      │   │
│   │  (你的数据)   │◄────►│ /_emdash/admin │   │
│   └───────────────┘      └────────────────┘   │
│        │                                      │
│   数据库 (SQLite / libSQL / D1 / Postgres)    │
│   媒体存储 (本地 / R2 / S3)                    │
└──────────────────────────────────────────────┘

你正常编写页面和组件。EmDash 提供内容、用于编辑的管理面板,以及背后的数据库和存储。编辑者在管理面板中工作;你的页面通过查询函数读取相同的内容。

你的内容模型

你在管理面板或使用 CLI 定义集合和字段,EmDash 将内容存储在其中。

随时更改

随时添加、重命名、删除或更改集合和字段的类型。 更改立即生效。

编辑者设计

内容编辑者可以通过管理 UI 设计整个模型。

类型化

从当前模型生成 TypeScript 类型,实现从 查询到模板的自动完成。

可移植

将模型导出为 JSON 种子文件用于版本控制,并在 另一个环境中应用它。

有关如何定义、更改、类型化和种子化的信息,请参阅内容模型

内容是实时的

EmDash 在运行时通过 Astro 的 Live Collections 提供内容,因此编辑者所做的更改会立即可见。你使用两个函数读取内容:

import { getEmDashCollection, getEmDashEntry } from "emdash";

const { entries: posts } = await getEmDashCollection("posts");
const { entry: post } = await getEmDashEntry("posts", "my-post-slug");

有关过滤、分页和草稿的信息,请参阅查询内容

你配置什么

你向集成传递数据库和存储后端。其他所有内容都有默认值。

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" }),
		}),
	],
});
  • 数据库:SQLite(本地或 libSQL)、Cloudflare D1 或 PostgreSQL。请参阅数据库选项
  • 存储:本地文件系统、Cloudflare R2 或任何 S3 兼容的媒体存储。请参阅存储选项

使用插件扩展

插件对内容和媒体生命周期事件做出反应,并可以添加管理页面、仪表板小部件和设置。有两种格式:

  • 原生插件在主机环境中运行,具有完全访问权限。最适合第一方和受信任的插件。
  • 沙盒插件在隔离的运行时中运行,具有基于能力的权限。最适合第三方插件。

请参阅插件概述以选择和安装插件,或创建插件

后续步骤

管理面板

查看管理面板为编辑者和管理员提供的功能。