创建你的第一个 EmDash 站点

本页内容

本教程从 Starter 模板创建一个 Node.js 站点。结果使用 SQLite 和本地 媒体存储,因此你可以在没有云账户的情况下完成本教程。

前提条件

安装 Node.js 22.16 或更高版本以及 npm。继续之前检查已安装的 Node.js 版本:

node --version

命令必须报告 v22.16.0 或更高版本。

搭建站点

  1. 从 Node.js Starter 模板创建 my-emdash-site

    npm create emdash@latest my-emdash-site -- --template node:starter --pm npm --yes

    明确选择 node:starter 会创建一个包含 Posts 和 Pages 的通用站点。 脚手架工具安装依赖并将生成的 EMDASH_ENCRYPTION_KEY 写入 被 git 忽略的 .env 文件。

    如果依赖安装失败,项目文件会保留。继续之前运行脚手架工具打印的重试命令。

  2. 进入项目目录并启动开发服务器:

    cd my-emdash-site
    npm run dev

    保持此终端打开。Astro 会打印本地站点 URL,通常是 http://localhost:4321/

完成设置

打开 http://localhost:4321/_emdash/admin/。新站点会重定向到设置向导。

  1. 输入 Site Title 和可选的 Tagline。保持 Include sample content 选中,以便 教程从模板的 Welcome 文章和 About 页面开始,然后选择 Continue

  2. 输入 Your Email 和可选的 Your Name,然后选择 Continue

  3. 当浏览器打开凭证提示时注册通行密钥。注册后,选择 Open the dashboard

仪表板打开,导航中显示 Posts 和 Pages。设置向导已将 Starter 模板的内容模型和示例内容应用到本地 SQLite 数据库。

发布编辑

  1. 打开 Posts,然后打开 Welcome

  2. 将标题改为 Hello from EmDash,然后选择 Save

  3. 选择 Publish changes,使保存的草稿成为向访客显示的版本。

  4. 在另一个标签页中打开 http://localhost:4321/。首页列出 Hello from EmDash

Starter 模板在 Astro 渲染首页时调用 getEmDashCollection("posts")。重新加载 页面会在运行时从 EmDash 读取已发布的版本。

生成的站点如何工作

脚手架生成一个普通的 Astro 项目,EmDash 在三个地方连接。

astro.config.mjs 启用服务器渲染和 Node.js 适配器。它还注册 React 用于 管理面板,并为 EmDash 提供 SQLite 数据库和上传媒体的目录。 src/live.config.ts 文件将该数据库支持的内容连接到 Astro 的 Live Content Collections。

首页然后查询 posts 集合。其查询等同于生成页面的以下部分:

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

const { entries: posts, cacheHint } = await getEmDashCollection("posts", {
	orderBy: { published_at: "desc" },
});

if (Astro.cache?.enabled) Astro.cache.set(cacheHint);
---

<ul>
	{posts.map((post) => <li>{post.data.title}</li>)}
</ul>

seed/seed.json 定义了 Posts 和 Pages 集合、它们的字段以及设置向导应用的示例内容。 在本地开发期间,EmDash 读取该模型并刷新 emdash-env.d.ts, 使你的编辑器可以在查询代码中检查集合名称和字段。

生成的 .env 在运行时提供加密密钥。它与存储模型和内容的 SQLite 文件是分开的。

下一步

阅读架构了解这些部分如何协同工作。要将 EmDash 添加到 已有的站点,请遵循将 EmDash 添加到现有 Astro 项目内容查询指南涵盖过滤器、分页、草稿和错误处理。 当站点准备好离开你的机器时,将其部署到 Cloudflare WorkersNode.js媒体库指南解释了上传、媒体字段、替换和删除。