安装插件

本页内容

管理员可以从插件注册表安装沙箱化插件,也可以在 astro.config.mjs 中注册 npm 包。基于配置的插件既可以在沙箱中运行,也可以在站点进程中运行。

为管理后台安装做准备

注册表安装需要:

  • 一个具有 plugins:manage 权限的管理员账户。
  • 为下载的插件包配置的存储。
  • 一个可用的沙箱运行器。

在 Cloudflare Workers 上,请使用 @emdash-cms/cloudflare 中的 sandbox():

import { sandbox } from "@emdash-cms/cloudflare";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";

export default defineConfig({
	integrations: [
		emdash({
			sandboxRunner: sandbox(),
		}),
	],
});

Cloudflare 运行器使用 Worker Loader 为每个插件创建一个独立的 Worker。它需要 Workers Paid 套餐,以及一个名为 LOADER 的 worker_loaders 绑定。沙箱化插件通过 PluginBridge 访问内容、媒体、存储、网络和电子邮件 API,因此站点的 Worker 入口点必须导出该类。

*-cloudflare 模板会导出 PluginBridge,但把 Worker Loader 绑定保持为注释状态,这样新项目可以部署在 Workers 免费套餐上。你可以在脚手架生成期间启用沙箱化插件,也可以按照 Cloudflare 沙箱设置稍后再添加该绑定。sandbox() 辅助函数会在构建时读取实际生效的 Wrangler 配置。没有 LOADER 时,仍然可以浏览注册表,但由配置管理的沙箱化插件不会加载,安装或更新请求会返回 SANDBOX_NOT_AVAILABLE。

在 Node.js 上,请安装运行器及其 workerd 对等依赖:

npm install @emdash-cms/sandbox-workerd workerd

workerd 进程会把插件代码与 Node.js 服务器分开运行。请在 EmDash 集成中选择该运行器:

import { defineConfig } from "astro/config";
import emdash from "emdash/astro";

export default defineConfig({
	integrations: [
		emdash({
			sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",
		}),
	],
});

两个平台上的开发设置、运行时要求、资源限制以及运行器不可用时的错误,请参阅配置插件沙箱。

从注册表安装

  1. 在管理后台中打开 Registry。
  2. 搜索某个插件并打开它的详情页。
  3. 选择一个发布版本,并审阅它的发布者、元数据、所请求的权限和验证状态。
  4. 选择 Install。
  5. 在同意对话框中审阅已验证的发布版本标识符和权限,然后确认。

EmDash 会验证发布者当前已签名的记录,并在通过沙箱运行器加载下载的插件包之前对其进行检查。该插件会出现在 Plugins 下,你可以在那里禁用或配置它。完整的验证和信任模型请参阅插件注册表。

审阅权限

同意对话框会显示该插件声明的每一项权限。常见的权限包括:

权限授予的访问权限
content:read读取站点内容
content:write创建、更新和删除内容
content:revisions:read读取保留的内容修订历史
schema:read读取集合和字段定义
bylines:read读取公开的署名档案和内容署名
redirects:read读取重定向规则
redirects:write更改访问者被引导到的位置
media:read读取已就绪媒体的安全元数据
media:bytes:read读取已就绪媒体的文件内容和内容哈希
media:metadata:write更改媒体的替代文本、说明文字和焦点
media:write上传、替换和删除媒体
network:request向插件允许的主机列表发送请求

当插件声明了作为模型上下文协议(MCP)工具公开的插件路由时,对话框也会标明这些路由。完整的权限模型请参阅能力与安全。

更新插件

  1. 在管理后台中打开 Plugins。
  2. 选择 Check for updates。
  3. 在有可用发布版本的注册表插件上选择 Update。
  4. 审阅同意对话框,然后确认更新。

当注册表更新增加权限或 MCP 工具,或者把某个路由从需要认证改为公开时,需要再次确认。在你批准这项变更之前,EmDash 会保留已安装的版本。

显式更新只会向前推进。跟随注册表最新发布版本的更新,在发布者撤回最新版本时可能会回滚。其他任何时候若要回到较旧的版本,请卸载该插件,然后从它的注册表页面安装那个版本。除非你选择删除,否则卸载会保留插件存储的数据。

卸载插件

  1. 在管理后台中打开 Plugins,并展开已安装的插件。
  2. 选择 Uninstall。
  3. 只有在以后重新安装时不需要该插件所存储的数据时,才选择 Also delete plugin storage data。
  4. 确认卸载。

EmDash 会移除已安装的插件包,并停止加载该插件。默认情况下,插件存储的数据会保留。

从 npm 安装

原生插件和由配置管理的沙箱化插件都作为 npm 依赖安装。请按照该包的说明选择 plugins: [] 或 sandboxed: []。

下面的示例注册了原生的 Field Kit 插件:

import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { fieldKitPlugin } from "@emdash-cms/plugin-field-kit";

export default defineConfig({
	integrations: [
		emdash({
			plugins: [fieldKitPlugin()],
		}),
	],
});

由配置管理的插件会在你更新 npm 依赖并部署站点时发生变化。它们不能从管理后台安装或移除。

选择安装方式

注册表使用 sandboxed: [] 的 npm使用 plugins: [] 的 npm
安装和更新管理后台更改依赖并部署更改依赖并部署
执行位置已配置的沙箱运行器已配置的沙箱运行器站点进程
对 EmDash 的访问仅限已声明的插件 API仅限已声明的插件 API已声明的插件 API,加上直接的进程访问
Node.js API 和直接的 fetch()不可用不可用可用
React 管理后台组件不可用不可用可用
Portable Text 渲染器不可用不可用可用

当插件需要 React 管理后台组件、Portable Text 渲染器、页面片段,或需要直接访问站点进程时,请使用原生插件。当插件可以通过已声明的插件 API正常工作时,请使用沙箱化插件。