概述
查看 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 查询。