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 兼容的媒体存储。请参阅存储选项。
使用插件扩展
插件对内容和媒体生命周期事件做出反应,并可以添加管理页面、仪表板小部件和设置。有两种格式:
- 原生插件在主机环境中运行,具有完全访问权限。最适合第一方和受信任的插件。
- 沙盒插件在隔离的运行时中运行,具有基于能力的权限。最适合第三方插件。