📝

概述

查看 Strapi v4 与 v5 之间引入的所有破坏性变更列表。

📝

SQLite 客户端仅支持 `better-sqlite3` 包

在 Strapi 5 中,用户只能使用 `better-sqlite3` 包用于 SQLite 数据库,且其 `client` 值必须设置为 `sqlite`。

📝

创建条目时上传文件不再受支持

在 Strapi 5 中,无法在创建条目时上传文件,因此用户必须先上传文件,再通过已创建的文件 id 创建条目。

📝

控制器中默认对 REST API 输入进行校验

在 Strapi 5 中,控制器默认对 REST API 输入进行校验,而非静默接受无效数据并清理它。

📝

启用草稿与发布时不能将 'status' 用作属性名

在 Strapi 5 中,用户自定义的 'status' 属性会与草稿与发布的发布状态参数冲突,并被内容类型构建器拒绝。

📝

defaultIndex 已移除

在 Strapi 5 中,'defaultIndex' 选项已从 'public' 中间件中移除。

📝

模板现在是常规的独立 Strapi 应用

模板在 Strapi 5 中已被完全重写,现在是独立的、常规的 Strapi 应用,使其更易于创建、分发和复用。

📝

文档服务 API 中不再有 findPage()

在 Strapi 5 中,实体服务 API 已弃用,对于 findPage() 方法,你应改用文档服务 API 的 findMany() 方法。

📝

核心服务方法使用文档服务 API

在 Strapi 5 中,核心服务方法使用文档服务 API 而非实体服务 API。

📝

组件与动态区域不再返回 id

在 Strapi 5 中,组件与动态区域使用 REST API 请求时不再返回 `id`,因此无法对其进行部分更新。

📝

publicationState 已移除并由 status 取代

在 Strapi 5 中,内容 API 调用中不再能使用 'publicationState'。可以使用新的 status 参数,它接受 2 个不同的值:draft 和 published。

📝

Vite 是默认打包工具

在 Strapi 5 中,Vite 是默认打包工具,取代了 webpack。

📝

数据库生命周期钩子随文档服务 API 方法以不同方式触发

在 Strapi 5 中,数据库生命周期钩子随各种文档服务 API 方法以不同方式触发。

📝

保留的属性与内容类型名称

在 Strapi 5 中,部分属性和内容类型名称为保留名称,所有使用了这些保留名称的字段或内容类型应在迁移前重命名,以防止数据丢失。

📝

禁用草稿与发布的内容类型始终将 publishedAt 值设置为日期

在 Strapi 5 中,禁用草稿与发布的内容类型始终将 publishedAt 值设置为日期。

📝

API 调用中应使用 documentId 而非 id

在内容 API 调用(REST API 和 GraphQL)中,应通过 documentId 来调用文档。

📝

helper-plugin 已移除

在 Strapi 5 中,`helper-plugin` 已被移除。为插件开发者提供了完整的迁移参考,codemod 会自动处理部分变更。

📝

Strapi 5 使用 React Router DOM 6

Strapi 5 使用 react-router-dom v6。这影响了通过 Admin Panel API 添加到全局设置或菜单中的链接。

📝

Strapi 是 Container 的子类

在 Strapi 5 中,可以直接从 strapi 类访问容器方法。

📝

injectContentManagerComponent() 已移除

在 Strapi 5 中,内容管理器是一个插件,这影响了 injectContentManagerComponent() 方法,由其被 getPlugin('content-manager').injectComponent() 取代。

📝

服务器代理配置

在 Strapi 5 中,所有代理配置选项现在都通过 '/config/server.js|ts' 中的 'server.proxy' 对象进行配置,而非像 Strapi v4 中那样使用各种选项名(如 'globalProxy' 和 'proxy')。

📝

部分仅限环境变量的配置选项现由服务器配置处理

在 Strapi 5 中,部分仅限环境变量的配置选项现由服务器配置处理

📝

模型配置路径使用 uid 而非点号表示法

像 `api::myapi` 和 `plugin::upload` 这样的模块在 Strapi 配置中不应再使用 `api.myapi` 和 `plugin.upload` 访问,而应改用 `api::myapi` 和 `plugin::upload`。

📝

watch-admin 模式默认启用

在 Strapi 5 中,strapi develop 命令默认以 watch-admin 模式启动,而它在 Strapi v4 中是可选开启的。

📝

数据库列

内容类型始终包含功能列

📝

Strapi 5 使用 koa-body v6

Strapi 5 使用 koa-body v6,它将 node formidable 更新到 v2。

📝

管理面板 RBAC 系统已更新

在 Strapi 5 中,不再有 `content-manager_rbacManager`,而是使用常规的权限系统。

📝

用户与权限插件的 register.allowedFields 配置选项默认为 []

在 Strapi 5 中,用户与权限插件的 `register.allowedFields` 配置选项默认为 []。

📝

空的 morphMany 关联在联表加载时返回 [] 而非 null

在 Strapi 5 中,联表加载一个空的 morphMany 关联或多个媒体字段会返回空数组而非 null。

📝

Strapi 5 中的设计系统更新

Strapi 设计系统在 Strapi 5 中进行了重大更新,涉及组件结构、API 和使用方式的变化。

📝

实体服务已弃用

在 Strapi 5 中,实体服务 API 已弃用,由新的文档服务 API 取代。

📝

strapi.fetch 使用原生 fetch() API

在 Strapi 5 中,`strapi.fetch` 对象现在包装的是原生 node Fetch API,而非 node-fetch。

📝

使用文档服务 API 更新可重复组件

在 Strapi 5 中,不建议通过已发布组件的 id 更新可重复组件;建议优先使用完整数组替换或草稿 id,直到出现稳定的组件键为止。

📝

ContentManagerAppState redux 已修改

在 Strapi 5 中,内容管理器的 redux store 已更改,并移除了部分 redux action。

📝

Mailgun 提供方部分遗留变量不再受支持

在 Strapi 5 中,Mailgun 提供方选项的部分变量已重命名,不再支持 Strapi v4 中已弃用的一些遗留变量。

📝

locale=all 不能再用于查询所有语言版本

在 Strapi 5 中,不再可能使用 '?locale=all' 参数获取所有本地化版本。

📝

组件与动态区域不再有共享联表加载策略

在 Strapi 5 中,共享联表加载策略不再受支持,因此组件和动态区域必须使用 `on` 片段显式联表加载。

📝

v5 中数据库标识符缩短

在 Strapi v5 中,数据库标识符被缩短,长度不能超过 55 个字符,以避免标识符过长带来的问题。

📝

Webpack Aliases 已移除

Strapi v5 中采用了简化的别名方式。

📝

服务器日志级别为 `http`

Strapi 5 中中间件 logger 的默认日志级别为 'http'。

📝

CLI 默认包管理器不再是 yarn

Strapi 5 会检测你用来运行 CLI 的包管理器,并使用该包管理器来安装依赖。

📝

webhooks.populateRelations 服务器配置已移除

在 Strapi 5 中,webhook 已重构,`webhook.populateRelations` 选项将变得多余。这可能会影响期望 create、update 和 delete 返回的关联被联表加载的生命周期。

📝

Strapi 5 采用了新的扁平化 API 响应格式

在 Strapi 5 中,响应格式已被简化并扁平化,所请求内容的属性不再包裹在 attributes 对象中。

📝

国际化(i18n)现已成为 Strapi 核心的一部分

国际化(i18n)现已成为 Strapi 核心的一部分,不再是一个插件,这影响了 locale 参数的发送与访问方式。

📝

MySQL 客户端仅支持 mysql2 包

在 Strapi 5 中,MySQL 数据库仅支持 mysql2 包。

📝

Amazon S3 提供方凭据必须设置在 s3Options 下

在 Strapi 5 中,Amazon S3 上传提供方选项必须嵌套在 s3Options 对象中,且凭据应包裹在 credentials 对象内。

📝

Strapi 工厂导入已更新

在 Strapi 5 中,通过应用 init 函数或工厂进行导入的方式已更新。

📝

lockIcon 被 licenseOnly 取代

在 Strapi 5 中,lockIcon 属性被 licenseOnly 取代,这影响了 Admin Panel API 中 addMenuLink()、addSettingsLink() 和 addSettingsLinks() 方法的工作方式。

📝

权限提供方实例的 getWhere() 方法已移除

在 Strapi 5 中,权限提供方实例的 getWhere() 已被移除,用户应使用 provider.values().filter() 来替代。

📝

按 id 排序不再能按时间顺序排序

在 Strapi 5 中,按 id 排序不再能按时间顺序排序,你应改用 createdAt。

📝

已重写 `EditViewLayout` 和 `ListViewLayout`

在 Strapi 5 中,部分管理面板 hook 已从 Redux store 中移除,并引入了新的 `useDocumentLayout` hook。

📝

Apollo Server v3 升级到 Apollo Server v4

从 Apollo Server v3 升级到 v4,graphql 从 ^15 升级到 ^16。

📝

strapi-utils 已重构

在 Strapi 5 中,核心包 'strapi-utils' 已重构。本页列出了新增、移除及其他更新。

📝

配置文件名的严格限制

Strapi 5 对允许加载的配置文件名有严格限制。

📝

MySQL v5 不再受支持

MySQL v5 在 Strapi v5 中不再受支持。

📝

GraphQL API 已更新

在 Strapi 5 中,GraphQL API 已更新。它处理新的扁平化响应格式,并且现在也可以接受 Relay-style 查询。

📝

is-supported-image-removed