跳到主要内容
版本:v5

将使用 Cordova 的 Web 应用迁移到 Capacitor

将使用 Cordova 的 Web 应用完全迁移到 Capacitor 需要几个步骤。

建议在应用这些更改时使用单独的代码分支。

添加 Capacitor

首先在终端中打开您的项目,然后按照将 Capacitor 添加到 Web 应用将 Capacitor 添加到 Ionic 应用的指南进行操作。

使用 Capacitor 初始化您的应用。系统提示您输入的一些信息可以在 Cordova 的 config.xml 文件中找到:

  • 应用名称可以在 <name> 元素中找到。
  • Bundle ID 可以在根 <widget> 元素的 id 属性中找到。
npx cap init

构建您的 Web 应用

在添加任何原生平台之前,您必须至少构建一次 Web 项目。

npm run build

这确保了 Capacitor 已自动配置为在 Capacitor 配置文件中使用 www 文件夹作为 webDir

添加平台

Capacitor 原生平台存在于它们自己的顶级文件夹中。Cordova 的平台位于 platforms/iosplatforms/android 下。

npx cap add ios
npx cap add android

在项目根目录下会创建 android 和 ios 文件夹。这些是完全独立的原生项目产物,应被视为应用的一部分(即,将它们纳入版本控制,在它们自己的 IDE 中编辑等)。此外,在 package.jsondependencies 中找到的任何 Cordova 插件都会被 Capacitor 自动安装到每个新的原生项目中(排除任何不兼容的插件):

"dependencies": {
"@ionic-native/camera": "^5.3.0",
"@ionic-native/core": "^5.3.0",
"@ionic-native/file": "^5.3.0",
"cordova-android": "8.0.0",
"cordova-ios": "5.0.0",
"cordova-plugin-camera": "4.0.3",
"cordova-plugin-file": "6.0.1",
}

启动屏和图标

如果您之前创建了图标和启动屏图像,它们可以在项目顶层的 resources 文件夹中找到。有了这些图像,您可以使用 cordova-res 工具为基于 Capacitor 的 iOS 和 Android 项目生成图标和启动屏。

首先,安装 cordova-res

npm install -g cordova-res

接下来,运行以下命令重新生成图像并将其复制到原生项目中:

cordova-res ios --skip-config --copy
cordova-res android --skip-config --copy

完整详情请参见此处

迁移插件

首先审核您现有的 Cordova 插件——您可能能够移除不再需要的插件。

接下来,查看所有 Capacitor 的官方插件以及社区插件。您可能可以切换到与 Cordova 插件功能对等的 Capacitor 插件。

某些插件的功能可能不完全匹配,但基于您所需的功能,这可能并不重要。

请注意,任何不兼容或导致构建问题的插件都会被自动跳过。

移除 Cordova 插件

在用 Capacitor 插件替换 Cordova 插件(或完全移除它)后,卸载该插件然后运行 sync 命令以从原生项目中移除插件代码:

npm uninstall cordova-plugin-name
npx cap sync

设置权限

默认情况下,最新版本 Capacitor 所需的全部初始权限已在 iOS 和 Android 的默认原生项目中为您设置好了。但是,您可能需要通过在 plugin.xml 与 iOS 和 Android 上的必需设置之间进行映射,来手动应用额外的权限。请查阅 iOSAndroid 配置指南,了解如何配置每个平台。

Cordova 插件偏好设置

当运行 npx cap init 时,Capacitor 会读取 config.xml 中的所有偏好设置,并将它们移植到 Capacitor 配置文件中。您可以手动向 cordova.preferences 对象添加更多偏好设置。

{
"cordova": {
"preferences": {
"DisableDeploy": "true",
"CameraUsesGeolocation": "true"
}
}
}

config.xml 中的其他字段

您可能想知道 config.xml 中的其他元素如何在 Capacitor 应用中工作。

Author 元素可以在 package.json 中配置,但 Capacitor 或您的应用不会使用它:

<author email="email@test.com" href="http://ionicframework.com/">Ionic Framework Team</author>

大多数 allow-intent 值要么不被使用,要么有可配置的替代方案

<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />

iOS 的 edit-config 元素需要在 Info.plist 中配置

<edit-config file="*-Info.plist" mode="merge" target="NSCameraUsageDescription">
<string>用于拍照</string>
</edit-config>

不可能涵盖所有可用的 config.xml 元素。然而,大多数关于"如何在 Capacitor 中配置 X?"的问题,在网上搜索答案时应视为"如何在 [平台] (iOS/Android) 中配置 X?"。

设置 Scheme

当将 Ionic 与 Cordova 一起使用时,您的应用默认使用 cordova-plugin-ionic-webview,在 iOS 上它使用 ionic:// scheme 来提供内容。Capacitor 应用在 iOS 上默认使用 capacitor:// 作为 scheme。这意味着使用像 LocalStorage 这样绑定源(origin)的 Web API 会导致数据丢失,因为源不同了。这可以通过更改用于提供内容的 scheme 来解决:

{
"server": {
"iosScheme": "ionic"
}
}

移除 Cordova

在您测试确认所有迁移更改已应用并且应用运行良好后,可以从项目中移除 Cordova。删除 config.xml 以及 platformsplugins 文件夹。请注意,从技术上讲,您不必移除 Cordova,因为 Capacitor 可以与之共存。实际上,如果您计划继续使用 Cordova 插件或认为将来可能会使用,您可以将 Cordova 资产留在原处。

下一步

这只是您的 Capacitor 之旅的开始。了解更多关于在 Capacitor 项目中使用 Cordova 插件的信息,或了解更多关于 Capacitor 开发工作流的详细信息。