安装插件

本页内容

EmDash 插件可以通过两种方式安装:从管理面板的市场安装,或直接在 Astro 配置中添加。市场插件始终在沙盒中运行;配置方式的插件根据声明在哪个数组中(sandboxed: [] 还是 plugins: [])在沙盒或进程内运行。

从市场安装

管理面板包含一个市场浏览器,您可以在其中搜索、安装和管理插件。

前提条件

要安装市场插件,您的站点需要:

  1. 配置沙盒运行器 — 市场插件运行在隔离的运行时中,这需要沙盒运行器。以下配置启用它:

    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

    每个运行器的绑定、资源限制和故障模式在插件沙盒中描述。

  2. 管理员权限 — 只有管理员可以安装或移除插件。

浏览和安装

  1. 打开管理面板并导航到 Plugins > Marketplace
  2. 浏览或搜索插件
  3. 点击插件卡片查看其详情页面——README、截图、能力和安全审计结果
  4. 点击 Install
  5. 查看能力授权确认对话框——这显示插件将能够访问的内容
  6. 确认安装

插件将被下载、存储在您站点的 R2 存储桶中,并加载到沙盒运行器中。它会立即生效。

能力授权确认

在安装之前,您将看到一个对话框,列出插件需要访问的内容:

能力含义
content:read读取您的内容
content:write创建、更新和删除内容
media:read访问您的媒体库
media:write上传和管理媒体
network:request向特定主机发起网络请求

安全审计

市场中每个插件版本都经过了自动化安全审计。审计结论显示在插件卡片上:

  • 通过 — 未发现问题
  • 警告 — 标记了轻微问题(请查看发现的内容)
  • 失败 — 检测到重大安全问题

您可以在插件详情页面查看完整的审计报告,包括各项发现及其严重程度。

更新

当已安装插件有更新版本可用时:

  1. 在管理面板中打开 Plugins
  2. 市场插件会显示 Update available 徽章
  3. 点击 Update 查看更新日志和任何能力变更
  4. 如果新版本需要额外的能力,您将看到差异并需要批准
  5. 确认更新

卸载

  1. 在管理面板中打开 Plugins
  2. 点击您要移除的市场插件
  3. 点击 Uninstall
  4. 选择是保留还是删除插件存储的数据
  5. 确认

插件的沙盒代码将从您的 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 渲染组件不支持支持(原生插件)
更新管理面板一键更新版本升级 + 部署
最适用于大多数插件需要构建时集成的插件