在您的应用中升级 Capacitor 到 3.0
Capacitor 3 为生态系统带来了关键更新和令人兴奋的新功能。
在将您的应用升级到 Capacitor 3 之后,您是否愿意在此讨论中分享您的任何反馈?我们很乐意听取您的意见!💖
如果您是插件作者,希望将您的插件升级到更新的 Capacitor 版本,请参阅Capacitor 插件升级指南。
NodeJS 12+
Node 8 已结束生命周期。Node 10 将于 2021 年 4 月 30 日结束生命周期。Capacitor 3 需要 NodeJS 12 或更高版本。(建议使用最新的 LTS 版本。)
Ionic CLI
如果您正在使用 Ionic CLI,官方对 Capacitor 3 的支持从版本 6.16.0 开始。我们建议此时通过 npm install -g @ionic/cli 升级到最新版本。
更新 Capacitor CLI 和 Core
npm install @capacitor/cli@latest-3 @capacitor/core@latest-3
ES2017+
Capacitor 3 现在针对 ES2017 环境构建,而不是 ES5。插件模板也已更新以针对 ES2017,鼓励第三方插件更新其目标。
除非您支持 IE11(Capacitor 不正式支持),否则此更改不应影响您的应用。
TypeScript 3.8+
Capacitor 3 使用较新的 TypeScript 语法,该语法只能在 TS 3.8 或更高版本中使用。
Capacitor 配置变更
如果您安装了 TypeScript 3.8+,可以将 capacitor.config.json 迁移为类型化的 TypeScript 配置文件,命名为 capacitor.config.ts。您可以继续使用 .json 文件,但 TypeScript 配置文件可能会为您的团队提供更好的开发体验。以下是 Capacitor 测试应用中使用的 capacitor.config.ts 文件示例。
/// <reference types="@capacitor/local-notifications" />
/// <reference types="@capacitor/push-notifications" />
/// <reference types="@capacitor/splash-screen" />
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.capacitorjs.app.testapp',
appName: 'capacitor-testapp',
webDir: 'build',
plugins: {
SplashScreen: {
launchAutoHide: false,
},
LocalNotifications: {
smallIcon: 'ic_stat_icon_config_sample',
iconColor: '#CE0B7C',
},
PushNotifications: {
presentationOptions: ['alert', 'sound'],
},
},
};
export default config;
官方插件
所有插件都已从 Capacitor 核心中移除,并放置到它们自己的 npm 包中。这样做有几个原因(参见 #3227),核心团队确信这是正确的方向。您可以像这样导入核心插件。
import { Camera } from '@capacitor/camera';
移除了后台任务、权限和照片插件
- 后台任务:此插件似乎很少使用,并且工作方式与大多数开发人员的预期不太一样。核心团队将在未来重新考虑后台功能。请关注 #3032 获取更新。
- 权限:核心团队已实现了这种集中式方法的替代方案,社区插件也可能采用(参见新的权限 API)。
- 照片:这个未记录的仅限 iOS 的插件已被移除。请使用
@capacitor-community/media。
可访问性、应用和模态框插件拆分
- 可访问性
- VoiceOver 和 TalkBack 功能已移至屏幕阅读器
- 应用
- 模态框
迁移您的应用以使用新的官方插件包
此更改将要求您单独安装您正在使用的每个插件。
- 在您的项目中搜索从
@capacitor/core的Plugins对象中提取的核心插件 - 找到相应的插件文档,请注意某些插件已被拆分
- 按照文档中每个插件的安装说明操作
- 将插件导入更改为从插件包导入(参见插件导入)
- 按照向后不兼容的插件更改中的任何说明操作
使用 Ionic Framework 吗?
Ionic Framework 使用了以下插件中的 API:
为了获得 Ionic Framework 的最佳用户体验,即使您没有在应用中导入这些插件,也应确保已安装它们:
npm install @capacitor/app @capacitor/haptics @capacitor/keyboard @capacitor/status-bar
插件导入
Plugins 对象已被弃用,但在 Capacitor 3 中将继续工作。Capacitor 插件应更新以使用新的插件注册 API(参见插件升级指南),这将允许它们直接从插件包导入。
今后,不应再使用来自 @capacitor/core 的 Plugins 对象。
// 旧方式
import { Plugins } from '@capacitor/core';
const { AnyPlugin } = Plugins;
直接从插件包导入插件是首选方式,但插件必须更新才能与 Capacitor 3 兼容,这样才可能实现。
// 新方式
import { AnyPlugin } from 'any-plugin';
向后不兼容的插件变更
虽然许多插件 API 保持不变以简化迁移到 Capacitor 3 的过程,但有些 API 需要进行代码更新和手动迁移。
- 辅助功能 / 屏幕阅读器
isScreenReaderEnabled()方法已重命名为isEnabled()'accessibilityScreenReaderStateChange'事件已重命名为'stateChange'- 在 Android 和 iOS 上,
speak()仅当屏幕阅读器当前激活时才有效。对于无论屏幕阅读器是否激活都需要文本转语音功能的场景,请使用@capacitor-community/text-to-speech
- 浏览器
prefetch()已被移除
- 设备
- 应用信息已从
getInfo()中移除 (appVersion、appBuild、appId和appName)。请使用 App 插件的getInfo()来获取这些信息 uuid已从getInfo()中移除。请使用新的getId()函数
- 应用信息已从
- 触觉反馈
HapticsNotificationType枚举键已从大写改为驼峰命名以匹配其他枚举
- 本地通知
- 该插件现在使用新的权限 API。
requestPermission()已被移除,请使用requestPermissions()
- 该插件现在使用新的权限 API。
- 推送通知
- 该插件现在使用新的权限 API。
requestPermission()已被移除,请使用requestPermissions()
- 该插件现在使用新的权限 API。
- 分享
share()方法现在返回ShareResult而不是anyshare()的返回值将不再包含completed。如果分享未完成,将会拒绝而不是返回未完成状态
- 存储
- 需要数据迁移! 内部存储机制已更改,需要进行数据迁移。已添加了一个便捷方法:
migrate()。要在不影响最终用户的情况下更新应用,请在调用任何其他方法之前调用migrate()
- 需要数据迁移! 内部存储机制已更改,需要进行数据迁移。已添加了一个便捷方法:
- 文件系统
stat()方法现在在所有平台上都以毫秒为单位返回 ctime 和 mtime 时间戳。之前,iOS 返回的时间戳是以秒为单位的
日志记录变更
hideLogs 配置选项在 Capacitor 3 中已被弃用。它已被新的 loggingBehavior 配置选项取代。详细信息可以在配置文档中找到
iOS
Capacitor 3 支持 iOS 12+。需要 Xcode 12+。推荐使用 CocoaPods 1.8+。