EmDash 插件可以通过两种方式安装:通过管理面板从 marketplace 安装,或直接在 Astro 配置中添加。Marketplace 插件始终在沙箱中运行;基于配置的插件根据它们声明的数组(sandboxed: [] vs plugins: [])在沙箱或进程内运行。
从 Marketplace 安装
管理面板包含一个 marketplace 浏览器,您可以在其中搜索、安装和管理插件。
前置条件
要安装 marketplace 插件,您的站点需要:
-
配置沙箱运行器 — Marketplace 插件在隔离的运行时环境中运行,这需要沙箱运行器。以下配置可启用它:
import { defineConfig } from "astro/config"; import emdash from "emdash/astro"; export default defineConfig({ integrations: [ emdash({ marketplace: "https://marketplace.emdashcms.com", sandboxRunner: "@emdash-cms/sandbox-cloudflare", }), ], }); -
管理员访问权限 — 只有管理员才能安装或删除插件。
浏览和安装
- 打开管理面板并导航到 插件 > Marketplace
- 浏览或搜索插件
- 点击插件卡片查看其详情页面 — README、截图、功能权限和安全审计结果
- 点击 安装
- 查看功能权限同意对话框 — 这会显示插件可以访问的内容
- 确认安装
插件将被下载,存储在您站点的 R2 存储桶中,并加载到沙箱运行器中。它会立即生效。
功能权限同意
在安装之前,您会看到一个对话框,列出插件需要访问的内容:
| 功能权限 | 含义 |
|---|---|
content:read | 读取您的内容 |
content:write | 创建、更新和删除内容 |
media:read | 访问您的媒体库 |
media:write | 上传和管理媒体 |
network:request | 向特定主机发送网络请求 |
安全审计
marketplace 中的每个插件版本都经过了自动安全审计。审计结果会显示在插件卡片上:
- Pass — 未发现问题
- Warn — 发现轻微问题(请查看详细结果)
- Fail — 检测到重大安全问题
您可以在插件的详情页面上查看完整的审计报告,包括各个发现及其严重程度。
更新
当已安装插件的新版本可用时:
- 在管理面板中进入 插件
- Marketplace 插件会显示 更新可用 徽章
- 点击 更新 查看更新日志和任何功能权限变更
- 如果新版本需要额外的功能权限,您会看到差异并需要批准
- 确认更新
卸载
- 在管理面板中进入 插件
- 点击您要删除的 marketplace 插件
- 点击 卸载
- 选择是保留还是删除插件的存储数据
- 确认
插件的沙箱代码将从您的 R2 存储桶中删除,并立即停止运行。
从配置安装
原生插件 — 您自己的代码或通过 npm 安装的包 — 直接添加到 Astro 配置中。以下示例注册了 SEO 插件:
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import seoPlugin from "@emdash-cms/plugin-seo";
export default defineConfig({
integrations: [
emdash({
plugins: [
seoPlugin({ generateSitemap: true }),
],
}),
],
});
原生插件:
- 在进程内运行(非沙箱)
- 可以完全访问 Node.js API
- 在构建时和每次服务器启动时加载
- 无法从管理界面安装或删除
Marketplace vs. 配置 — 何时使用哪个
| Marketplace(沙箱) | 配置(原生或进程内沙箱) | |
|---|---|---|
| 安装方式 | 管理界面一键安装 | 代码更改 + npm install + 部署 |
| 执行方式 | 通过配置的运行器在沙箱运行时中执行 | 进程内(或如果列在 sandboxed: [] 下且运行器可用则在沙箱中) |
| 功能权限 | 由沙箱桥强制执行 — ctx.* 控制加运行时隔离 | 仅 ctx.* 控制(进程内插件可以通过直接 fetch()、env、imports 绕过) |
| Node.js API | 不可用 | 完全访问(仅进程内) |
| React 管理页面 | 否(改用 Block Kit) | 是(原生插件) |
| PT 渲染组件 | 否 | 是(原生插件) |
| 更新 | 管理界面一键更新 | 版本升级 + 部署 |
| 最适合 | 大多数插件 | 需要构建时集成的插件 |