EmDash 插件可以通过两种方式安装:从管理面板的市场安装,或直接在 Astro 配置中添加。市场插件始终在沙盒中运行;配置方式的插件根据声明在哪个数组中(sandboxed: [] 还是 plugins: [])在沙盒或进程内运行。
从市场安装
管理面板包含一个市场浏览器,您可以在其中搜索、安装和管理插件。
前提条件
要安装市场插件,您的站点需要:
-
配置沙盒运行器 — 市场插件运行在隔离的运行时中,这需要沙盒运行器。以下配置启用它:
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", }), ], });在 Cloudflare Workers 上,沙盒使用 Dynamic Worker Loader API(无需额外设置)。在 Node.js 上,安装 workerd 沙盒运行器:
npm install @emdash-cms/sandbox-workerd然后显式传递运行器:
emdash({ marketplace: "https://marketplace.emdashcms.com", sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox", })在开发环境中,安装
miniflare作为开发依赖以加快沙盒启动:npm install -D miniflare每个运行器的绑定、资源限制和故障模式在插件沙盒中描述。
-
管理员权限 — 只有管理员可以安装或移除插件。
浏览和安装
- 打开管理面板并导航到 Plugins > Marketplace
- 浏览或搜索插件
- 点击插件卡片查看其详情页面——README、截图、能力和安全审计结果
- 点击 Install
- 查看能力授权确认对话框——这显示插件将能够访问的内容
- 确认安装
插件将被下载、存储在您站点的 R2 存储桶中,并加载到沙盒运行器中。它会立即生效。
能力授权确认
在安装之前,您将看到一个对话框,列出插件需要访问的内容:
| 能力 | 含义 |
|---|---|
content:read | 读取您的内容 |
content:write | 创建、更新和删除内容 |
media:read | 访问您的媒体库 |
media:write | 上传和管理媒体 |
network:request | 向特定主机发起网络请求 |
安全审计
市场中每个插件版本都经过了自动化安全审计。审计结论显示在插件卡片上:
- 通过 — 未发现问题
- 警告 — 标记了轻微问题(请查看发现的内容)
- 失败 — 检测到重大安全问题
您可以在插件详情页面查看完整的审计报告,包括各项发现及其严重程度。
更新
当已安装插件有更新版本可用时:
- 在管理面板中打开 Plugins
- 市场插件会显示 Update available 徽章
- 点击 Update 查看更新日志和任何能力变更
- 如果新版本需要额外的能力,您将看到差异并需要批准
- 确认更新
卸载
- 在管理面板中打开 Plugins
- 点击您要移除的市场插件
- 点击 Uninstall
- 选择是保留还是删除插件存储的数据
- 确认
插件的沙盒代码将从您的 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 访问权限
- 在构建时和每次服务器启动时加载
- 不能从管理 UI 中安装或移除
市场与配置——何时使用哪种
| 市场(沙盒) | 配置(原生或进程内沙盒) | |
|---|---|---|
| 安装方式 | 管理 UI 一键安装 | 代码更改 + npm install + 部署 |
| 执行 | 通过配置的运行器在沙盒运行时执行 | 进程内(或如果列在 sandboxed: [] 中且运行器可用则在沙盒中) |
| 能力 | 由沙盒桥强制执行——ctx.* 门控加运行时隔离 | 仅 ctx.* 门控(进程内插件可通过直接 fetch()、env、imports 绕过) |
| Node.js API | 不可用 | 完整访问(仅限进程内) |
| React 管理页面 | 不支持(使用 Block Kit 替代) | 支持(原生插件) |
| PT 渲染组件 | 不支持 | 支持(原生插件) |
| 更新 | 管理面板一键更新 | 版本升级 + 部署 |
| 最适用于 | 大多数插件 | 需要构建时集成的插件 |