将应用中的 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 和核心包
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';
Background Task、Permissions 和 Photos 插件已移除
- Background Task:此插件似乎很少使用,并且其工作方式与大多数开发人员的预期不符。核心团队将在未来重新考虑后台功能。请关注 #3032 获取更新。
- Permissions:核心团队已实现了一个替代此集中式方法的功能,社区插件也可以采用(参见新的 Permissions API)。
- Photos:这个未记录且仅限 iOS 的插件已被移除。请使用
@capacitor-community/media。
Accessibility、App 和 Modals 插件已拆分
- Accessibility
- VoiceOver 和 TalkBack 功能已移至 Screen Reader
- App
- 与应用相关的信息和功能保留在 App 中
- 应用的 URL 处理功能(
openUrl()和canOpenUrl())已移至 App Launcher
- Modals
- 操作表功能(
showActions())已移至 Action Sheet - 对话框功能(
alert()、prompt()和confirm())已移至 Dialog
- 操作表功能(
迁移您的应用以使用新的官方插件包
此变更要求您单独安装您正在使用的每个插件。
- 在您的项目中搜索从
@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';
不向后兼容的插件变更
虽然为简化迁移到 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。如果未完成分享操作,将改为拒绝(reject)
- 存储
- 需要数据迁移! 内部存储机制已变更,需要进行数据迁移。已新增便捷方法:
migrate()。为避免影响终端用户,请在调用任何其他方法前先调用migrate()来更新应用
- 需要数据迁移! 内部存储机制已变更,需要进行数据迁移。已新增便捷方法:
- 文件系统
stat()方法现在在所有平台均返回以毫秒为单位的 ctime 和 mtime 时间戳。此前 iOS 返回的时间戳单位为秒
日志记录变更
Capacitor 3 中已弃用 hideLogs 配置选项,由新的 loggingBehavior 配置选项替代。详细信息请参阅配置文档
iOS
Capacitor 3 支持 iOS 12+。需要 Xcode 12+。建议使用 CocoaPods 1.8+。