EmDash 1.2:重新设计的编辑器、视频模块和域名迁移

使用重新设计的编辑器进行写作,向富文本添加视频,翻阅长集合,从管理后台将站点迁移到新域,并使用新的 upgrade-emdash CLI 升级站点。

EmDash 1.2 在 1.1 版本发布五天后推出。这是一个更大的版本:合并了 100 个拉取请求,来自 21 位社区贡献者以及核心团队。

大部分工作都在后台管理。内容编辑器采用了新的布局,富文本可以包含视频,收藏列表也增加了页码。网站可以迁移到新域名而不会丢失用户的登录信息,后台管理界面也翻译成了更多语言。

此次版本更新还新增了upgrade-emdash一个命令,用于更新项目的 EmDash 软件包,并为您或您的代理生成特定站点的升级指南。除此之外,本次更新还包含一系列常规的可靠性提升和错误修复。

亮点包括:

  • 重新设计的内容编辑器
  • 将视频添加到富文本
  • 翻阅长篇收藏
  • 将网站迁移到新域名
  • 更多语言的管理员
  • 使用一条命令即可升级
  • Cloudflare Workers 更稳定
  • 升级说明

从这个版本开始,更新网站最快捷的方法是使用新的升级命令。请在项目目录中运行该命令:

npx upgrade-emdash@latest

它会更新所有直接emdash依赖@emdash-cms/*项,运行包管理器,并写入.emdash/UPGRADE.md您正在修改的变更日志条目。您仍然可以手动更新:

pnpm up --latest emdash
# or if you are using Cloudflare
pnpm up --latest emdash @emdash-cms/cloudflare

数据库迁移:此版本中无数据库迁移。1.1.0 和 1.2.0 版本之间没有新增或更改任何编号的核心迁移,因此无需应用任何架构或数据更改。部署前请阅读升级说明:部分更改会影响现有站点的电子邮件链接、插件、条目 ID 和站点地图。

重新设计的内容编辑器

内容编辑器采用了新的布局,更好地利用了空间,感觉不像是在填写表格,而更像是在编辑页面。

文章编辑器:顶部只有一个导航栏,包含“文章”面包屑导航、文章标题、已保存状态和“立即发布”按钮,然后是标题输入框、特色图片、格式工具栏和无边框正文。

其他修改内容包括:

  • 在标题末尾按回车键或向下箭头键可进入正文,在第一行按向上箭头键可返回上一行。点击最后一个文本块下方可继续在末尾输入。
  • 将鼠标悬停在代码块上会显示“+”号,点击后会在新行打开斜杠菜单,同时还会出现一个用于拖动代码块或打开其菜单的手柄,菜单选项包括:转换为、对齐、复制、上移、下移和删除。按 Esc 键可选中当前代码块,然后使用方向键在代码块之间移动。
  • 斜杠菜单已分组,显示每个代码块的 Markdown 快捷方式,并匹配诸如项目符号列表之类的缩写/bl以及Markdown本身,例如/#。
  • 滚动页面时,格式工具栏始终可见。选中文本会显示一个较小的工具栏,其中包含“转换为”、“链接”和“行内标记”;点击链接会显示链接指向的位置,并提供“编辑链接”和“删除链接”选项。
  • 输入、粘贴或拖放到引用或列表中的内容(例如标题或图像)如果无法存储在 Portable Text 中,则会显示在旁边,而不是在保存时消失。
  • 在手机和平​​板电脑上,导航栏始终显示在同一行,辅助按钮则以图标形式显示。

其他可移植文本字段保留了框架式编辑器。新插入的 HTML、iframe 和代码块现在与页面加载时已存在的代码块具有相同的键盘行为。此重新设计已在#3710中发布。感谢@khoinguyenpham04 的开发。

将视频添加到富文本

在编辑器中输入/video文字,即可从媒体库中选择视频或上传视频。您也可以将视频文件拖放到文本中的任何位置。

在该网站上,组件会使用浏览器自带的播放器PortableText渲染视频块,并在视频下方显示字幕。媒体库视频会在配置好存储的公共 URL 后,从该 URL 播放。如果视频块的资源来自媒体提供商,则会渲染该提供商的嵌入内容。上传内容遵循默认大小限制,即 50 MiB。Videoemdash/uimaxUploadSize

EmDash 网站上发布的一篇文章展示了一个全屏原生视频播放器,带有控制按钮,下方标题为“发布周,三十秒见分晓”。

现在提供的视频/_emdash/api/media/file/可以在 Safari 和 iOS 设备上播放。对于本地、S3 和 R2 存储适配器,媒体路由会响应Range请求206 Partial Content(#3828)。自定义存储适配器可以通过可选options.range参数 `range` 来添加范围支持download(),具体说明请参阅存储接口文档。忽略此参数的适配器仍然可以正常工作,返回整个文件。

部分网站需要对视频屏蔽进行更改(#3827):

  • 如果插件已经定义了一个video代码块,编辑器和网站会继续使用该插件的代码块。在 TypeScript 中,如果使用`now`PortableTextBlock进行筛选,则会返回 `false` ,因此读取插件自身的字段需要进行检查。_type === "video"PortableTextVideoBlock | PortableTextUnknownBlock
  • 如果您在自己的 TipTap 编辑器中使用portableTextToProsemirror`and` ,请向其架构添加具有属性`,` 、` ,`、` ,`和“ 的节点。prosemirrorToPortableTextvideoBlocksrcmediaIdprovidercaptionwidthheight
  • 检查每个媒体引用类型的代码应该接受"portable_text_video"。
  • 启用 Astro 的内容安全策略,并将媒体文件放在另一台主机上,允许该主机访问media-src。

请参阅“为编辑器添加视频”和“查询并渲染一个条目”以进行渲染。

翻阅长篇收藏

现在,管理后台的每个收藏列表都带有页码。“全部”和“回收站”标签页每次只加载一页,因此收藏列表打开时会显示 20 个条目,而不是 100 个。这两个标签页都使用媒体库的分页页脚(固定在屏幕底部),其中包含条目范围、每页显示 20、50 或 100 个条目的选项,以及跳转到任意页面的控件。选择会在页面之间保持不变。“回收站”徽章现在会统计所有已删除的条目,而不是只统计 50 个。

文章列表底部固定显示分页页脚,显示“显示 1-20 条,共 45 条”,每页显示数量设置为 20,并包含首页、上一页、页码、下一页和末页控件。

对于 API 客户端,GET /_emdash/api/content/{collection}其/trash路由接受一个基于 1 的page参数作为替代方案cursor。编号页面返回total,光标分页保持不变(#3773)。

将网站迁移到新域名

将 EmDash 网站迁移到新域名后,之前所有功能都指向旧域名。电子邮件链接仍然使用网站搭建时使用的地址,插件也仍然指向同一个过时的地址,而且用户在新地址上无法使用密码登录后,所有功能都无法恢复。EmDash 1.2 在“设置”>“常规”中新增了完整的域名迁移流程。

更改域名会打开一个对话框,在更改网站 URL之前,先检查新域名是否适用于此网站。电子邮件和插件中的链接、网站地图robots.txt、hreflang 链接、社交图片 URL 以及 SEO 面板中设置的规范链接都会使用新域名。如果检查无法访问网站(例如,需要localhost登录才能访问),对话框会询问是否保存地址而不进行检查。

“更改域”对话框包含将域指向站点的设置步骤、“新域”字段、提示密码仅在创建地址有效的说明,以及“取消”、“选中”和“切换”按钮。

通行密钥仅在创建它们的地址有效,因此,搬家后还需要执行以下两个操作才能帮助人们登录:

  • 当您使用除网站 URL以外的地址登录时,“继续”选项会显示。它会使用一个 5 分钟后过期的单次使用链接,引导您在新地址登录,然后打开“设置”>“安全”,以便您添加密码。此操作不需要电子邮件地址,并且当登录由 Cloudflare Access 等外部服务提供商处理时,不会显示此选项。
  • 邮件会告知所有其他活跃用户网站的最新地址,并附上指向新地址登录页面的按钮。该邮件不会自动登录。它需要邮件服务提供商、登录密码以及相关users:manage权限,并且每个网站每小时最多可以发送 3 次。

“站点 URL”字段现在为只读,只能通过对话框进行更改。当设置了 `<your-site-url>` siteUrl、 `<your-site-url>`EMDASH_SITE_URL或`<your-site-url>` 时,页面会显示该地址,并且电子邮件和插件中的链接将继续使用该地址。插件现在从 `<your-site-url>`和`<your-site-url> SITE_URL` 中读取相同的地址。更改后的站点 URL会在重启后或在 Cloudflare Workers 上启动新的隔离区时生效。ctx.site.urlctx.url()

升级前需要进行一项检查。如果您未进行配置siteUrl,电子邮件链接现在将使用“站点 URL”字段。如果该字段中包含的地址已失效,请参阅升级说明。

整个流程已在#3744中发布。感谢@swissky,他不仅完成了该流程,还在此版本中进行了 20 多项其他更改。有关步骤,请参阅“迁移到新域名” 。

更多语言的管理员

译者们为此次版本发布付出了大量努力:

  • 欧洲葡萄牙语(pt-PT)是一种新的语言环境,采用葡萄牙语日期格式。浏览器请求pt-PT使用欧洲葡萄牙语而不是巴西葡萄牙语,并且网站会将pt-PT邀请、登录和恢复电子邮件设置为使用该语言(#3796,感谢@DiogoDuart3)。
  • 现在管理员语言选择器中已添加了希伯来语,从右到左渲染,并带有希伯来语月份和星期名称( #3293,感谢@itaides)。
  • 泰语已完成。此前,3188 个字符串中有 1725 个回退到英语(#2791,感谢@SL33PiNg)。
  • 德语(#3835,@danielmlr)、加泰罗尼亚语(#3852)和繁体中文(#3860,@leevincent)已完成。
  • 现在几乎所有管理界面都支持韩语,并且术语也已更正。( #3718,@huketo)。
  • 西班牙语(西班牙)(#3721)和塞尔维亚语(拉丁语)(#3810)现已全部采用非正式语气,并附有更正。感谢@miljan-aleksic对此以及加泰罗尼亚语的贡献。
  • 丹麦语(#3558,感谢@kgni)和印尼语(#3851,#3872,感谢@Zahid09987)涵盖了最新的管理员字符串,日语则始终如一地使用目录中的长元音拼写(#3789,感谢@maikunari)。

现在,仅使用其中部分语言的网站可以通过以下方式将其余语言排除在管理软件包之外admin.locales(#3056):

emdash({
	admin: { locales: ["en", "de"] },
});

语言切换器中仅内置并提供列出的语言,并且en始终将其作为备用语言。未知代码会导致构建失败,并列出可用代码。未设置此选项的网站将保留所有语言。此外,管理员现在可以按需加载当前语言的日期选择器本地化,这为每个网站节省了约 220 KB 的 JavaScript 空间(#3923)。

公共网站也可以翻译评论。Comments并且CommentForm接受emdash/ui/comments一个labels属性来设置标题、会员徽章、点赞按钮、表单字段和状态消息。Comments还会根据页面语言环境格式化日期(#3697)。

使用一条命令即可升级

upgrade-emdash是一个全新的、独立版本的 CLI,它从现有站点运行(#3804)。它的设计目的是使用 npx 运行,而不是安装在站点中:

npx upgrade-emdash@latest

emdash它会解析每个直接依赖项的最新版本@emdash-cms/*,并保留每个依赖项的插入符号、波浪号或精确样式。它还会更新 pnpmcatalog:条目pnpm-workspace.yaml,运行项目的包管理器,并刷新项目的代理技能。如果任何步骤失败,它会恢复已更改的文件。

然后.emdash/UPGRADE.md,它会生成一份工作单,供您或编码代理使用。该工作单包含您已安装版本和目标版本之间完整的变更日志条目,这些条目取自每个软件包的确切发布标签。它还会比较安装前后的核心迁移。如果升级添加了迁移,则工作单要求在部署前成功构建、提供可恢复的恢复点并审核迁移目标。该命令不会编辑应用程序代码、应用迁移或进行部署。

用于--dry-run在不更改文件的情况下查看计划,--json以结构化数据形式查看计划,以及--yes跳过提示。该项目需要emdash安装 0.35.0 或更高版本,并且不支持 Yarn Plug’n’Play。有关完整步骤,请参阅“更新 EmDash” 。

Cloudflare Workers 更稳定

多项修复措施旨在解决工人可能提前完成的工作,或D1强制执行的限制:

  • 现在后台写入操作会通过缓存完成waitUntil,因此它们会在响应返回后完成,而不是被取消。这涵盖了 API 令牌的“上次使用”日期和过期记录清理(#3767),以及重定向命中计数和 404 日志条目(#3287)。感谢@danielmlr。此外comment:afterCreate,它还涵盖了之前沙盒插件无法完成的钩子操作:例如,一个向管理员发送新评论邮件的插件,之前无法发送任何邮件(#3631,感谢@DavidPivert)。
  • 每分钟运行一次的 cron 任务不再会超出冷启动隔离区的空闲 CPU 工作线程数限制。簿记清理任务现在每小时运行一次,而计划发布任务和 cron 任务仍然每分钟运行一次(#3861)。此外,当表大小低于其上限时,404 日志清理任务也会跳过全表扫描(#3753)。
  • 在 D1 版本中,为一篇条目分配超过 30 个分类或标签,或移除超过 100 个分类或标签,不再会报错too many SQL variables。此修复也解决了 WordPress 导入后导致此类文章缺少分类的问题(#3889)。插件ctx.storage getMany()支持deleteMany()任意数量的 ID(#3776)。
  • 对于拥有多个语言环境且使用 Cloudflare 数据库(D1、Durable Object SQL 或 Hyperdrive)的网站,entry.id始终包含语言环境前缀。此前,某些请求可能会缺少该前缀(#3922)。如果您的模板自行构建语言环境链接,请参阅升级说明。
  • 新创建的独立实例启动速度更快。数据库设置检查与运行时启动同时运行(#3573),插件提供程序选择与其他启动读取操作一起加载(#3574),并且在未登录页面上,小部件区域无需额外往返即可加载(#3575)。启动迁移检查期间的临时数据库错误不再导致该实例在所有迁移应用后阻塞 30 秒。

阅读完整的`emdash@1.2.0` 版本说明,然后按照更新 EmDash 的步骤备份、构建、部署和验证站点。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注