原文地址:ionicframework.com/blog/announ…
原文作者:twitter.com/maxlynch
发布时间:2019年5月22日
2020年4月更新:Capacitor 2.0现已发布!
今天,我很高兴地宣布Capacitor的1.0版本,这是Ionic新的原生API容器,可以轻松构建在iOS、Android、Electron和网络上运行的Web应用,作为渐进式Web应用--完全访问每个平台上的原生功能。
Capacitor 将您的 Web App 容器化,并为应用程序运行的每个平台提供一致的本地 API 访问。例如,这意味着在 iOS/Android 上访问相机与在 Electron 和网络上使用相同的代码。这使得建立一个在移动、桌面和网络上原生运行的网络应用变得非常容易。
Ionic应用使用Capacitor很像Cordova,可以在各种平台上无缝运行你的应用,而不需要特定平台的代码。然而,Capacitor为Cordova的方法带来了一些重大的变化,你会想在下面阅读更多的内容。
随着这个版本的发布,我们离让Capacitor成为每个新的Ionic应用的官方原生容器又近了一步,请继续阅读,看看这意味着什么,以及它将如何影响您的Ionic开发。
Capacitor如何工作
想象一个典型的Web应用。你可能有一些框架代码来让你的应用呈现并管理业务逻辑。它很可能是使用一个典型的框架编写的,比如Angular、React、Vue,或者类似Stencil的东西。下面,你可能使用Ionic这样的UI系统来获得高质量的UI控件。
对于许多Web Apps来说,没有更多的考虑,因为你的应用一般都是在浏览器中运行的,出于良好的安全性考虑,你只能访问浏览器中原生支持的一组Web API。然而,当在移动和桌面的Web View环境中运行时,情况就不一样了!
在这种情况下,由于您的应用程序在典型的浏览器沙盒之外运行,因此您的Web应用程序没有理由不能访问给定平台上可用的每个Native API。例如,使用生物识别认证并将数据存储在钥匙链中。
然而,将一个Web App,放在一个原生Web View控件中(与Chrome/Firefox/Safari等完整的浏览器相对),然后将JavaScript调用代理到原生代码,在此过程中将数据返回给你的Web App,这并不是直接的。
这就是 Capacitor 的工作:它将您的 Web App 容器化,并将其放入一个受管理的原生 Web View(如果是原生运行),然后它以跨平台的方式将原生功能暴露给您的 Web App。然后,Capacitor提供了一种简单的方法,将自定义的本地功能暴露给您的Web应用程序(通过插件),以及在命令行上与Web应用程序容器一起工作的工具。
Capacitor与Cordova有何不同?
在精神上,Capacitor和Cordova非常相似。两者都管理一个Web视图,并提供了一种结构化的方式,将本地功能暴露给你的Web代码。
两者都提供了开箱即用的通用核心插件,用于访问Camera和Filesystem等服务。事实上,Capacitor的设计目标之一就是支持Cordova插件的开箱即用。虽然Capacitor并不是支持每一个插件(有些根本就不兼容),但一般来说,它支持Cordova生态系统中的大部分插件。
然而,在每一步中,Capacitor都采取了一种略微不同的方法,我们认为开发者会喜欢这种方法,尽管有些方法有折衷的地方需要注意。
原生项目作为源码工件
Capacitor通常希望你将你的原生应用项目(Xcode、Android Studio等)作为源码工件提交。这意味着很容易添加自定义的原生代码(例如,要集成一个需要在iOS上修改AppDelegate的SDK),构建 "插件 "以将原生功能暴露给你的Web应用,而不必真正构建一个独立的插件,同时还可以以拥抱该平台最佳工具的方式调试和管理你的应用。
我们认为这是正确的平衡,因为像Stack Overflow这样的资源和典型的原生应用项目管理的工作方式与该平台的原生开发者完全相同。这有助于你在遇到平台特定问题时充分利用帮助资源,并使拥有原生和Web开发人员的混合团队能够更好地合作。
然而,这种方法也有折衷的地方。升级需要更多的手工工作,因为你必须带上你的原生项目。你不能直接把你的原生项目炸掉,然后重新创建它(除非你没有修改任何项目)。安装插件不会修改你的项目,所以你需要手动修改偏好文件,比如Info.plist。
然而,我们发现,随着项目规模的扩大,能够完全管理你的原生项目是一个很大的安慰。
不再需要deviceready
Capacitor通过在你的页面加载之前加载所有插件JavaScript来杀死deviceready
事件,使得每个API都能立即使用。此外,与Cordova不同,插件方法是直接暴露的,而不是通过exec()函数调用。
这意味着不用再疑惑为什么你的应用不能工作,为什么deviceready
没有被启动。
拥抱NPM,更轻松地开发插件
Capacitor对项目中的每一个依赖关系,包括插件和平台,都采用了NPM。这意味着你永远不会capacitor install plugin-x
,你只需npm install plugin-x
,然后当你同步你的项目时,Capacitor会检测并自动链接你已经安装的任何插件。
考虑到这一点,使其易于构建和共享插件是我们对 Capacitor 的主要关注领域之一。Cordova插件的开发者都知道,构建插件并不容易,如果不导入到现有的应用程序中,几乎不可能将其作为独立的项目来构建和测试,因为它们通常只是一个没有项目脚手架的源文件集合。
Capacitor对Plugins的工作方式做了一些大的改变,也让它们更容易构建。首先,Capacitor没有直接将插件文件复制到项目中,而是要求你的插件必须是iOS的Cocoa Pods或Android的典型安卓库。然后,电容自带了一个plugin:generate
命令,可以快速地将插件项目棚架出来,完成Xcode和Android Studio项目和单元测试。
我们希望这种专注于改善插件开发体验的做法意味着更多的插件将被构建,插件将随着时间的推移得到更好的维护。如果你有兴趣为 Capacitor 构建自己的插件,请查看我们的《插件开发指南》。
更新后的插件API
开发者可能会欣赏我们对核心插件所做的一些改变,比如Filesystem插件,它更像一个节点,避免了现在已经失效的Web Filesystem API。
一流的 Electron 和 PWA 支持
Capacitor在桌面功能上拥抱Electron,同时为Web应用和Progressive Web Apps增加一流的支持。
事实上,我们更进一步,为 Camera 等 API 构建了一系列 UI 体验,将用户期望的原生应用 UI 体验带入 Progressive Web Apps。我们称之为 "渐进式Web应用操作系统"。
最重要的是,构建提供web功能作为后备功能的插件,就像在你的插件中添加几个文件一样简单! Capacitor只会在原生的实现不可用的情况下使用你的Web实现,因此用户在iOS、Android、Electron和Web上运行时都可以使用完全相同的API。
本地CLI体验
Capacitor 提供了一个微小的 CLI,它被安装到每个应用程序的本地。这意味着没有全局的依赖关系需要管理,而且可以在您构建的每个应用程序中轻松使用不同版本的 Capacitor。
但这还不是全部,朋友们!
开发者可能会注意到,Capacitor的 "感觉 "与Cordova有很大不同。想要了解更多,请关注我们的安装指南。
Ionic支持Cordova怎么办?
虽然Capacitor是为了有朝一日在每个Ionic应用中取代Cordova,但这并不意味着我们不再支持Cordova! 事实上,我们一直在为Cordova开发一些新的插件和功能,目标是在Capacitor中也支持它们。我们认为Cordova是一个伟大的项目,它是Ionic成功的关键资产,这就是为什么我们不急于取代它,并将在未来的许多年里支持它的原因!
也就是说,我们对使用 Ionic 构建应用背后的开发者体验非常执着,并认为 Capacitor 是我们可以控制它的每一个方面,并使原生层更好地与 Ionic 的目标保持一致,所以我们确实计划随着时间的推移,更加突出地推动 Capacitor。
谁在使用 Capacitor?
Capacitor已经 "出炉 "了一年多一点。从那时起,我们已经看到了一些非常惊人的应用程序在它的基础上构建,以及一些主要的企业客户采用它的应用程序,你很可能有一天会使用它。
全球顶级快餐连锁店正在 Capacitor 上部署移动和桌面的店内体验。像西南地区这样的公司正在 Capacitor 和 Ionic 上构建所有新员工的入职体验,而像 Sworkit 这样的流行消费类应用则在 Capacitor 上构建了他们最新和最棒的版本(在这种情况下是 Ionic 4!)。
这只是在 Capacitor 上构建的团队的一个小样本。你是否打算使用 Capacitor 构建你的下一个应用程序?请告诉我们 我们很乐意了解更多信息,如果您有兴趣,甚至可以做一个案例研究。
开始使用
昨天,我们录制了一个特别的 Capacitor 发布网络研讨会。在其中,我们演示了一些Capacitor的API,并展示了将Capacitor添加到当前使用Cordova插件的现有Ionic应用中是多么简单。没能参加?录音可以在我们的YouTube频道上找到。
你也可以马上开始使用。很容易将 Capacitor 放到任何现有的现代网络应用中(当然包括 Ionic 应用)。
谢谢您的支持
Capacitor自2017年底开始酝酿,当时我们开始探索创建Cordova的替代方案。我们的驱动力是希望对Cordova开创的方法做出一些重大改变,同时随着Ionic的使命扩展到帮助团队在各地构建优秀的应用,我们也满足了全面支持桌面和Web平台的需求。
从那时起,我们从社区得到了一些精彩的贡献,我要感谢每一个提交问题、提交PR,或者只是传播项目的人。
现在Capacitor 1.0来了,我们希望你能明白为什么我们在过去一年半的时间里投资这个新项目。我们真的是刚刚开始,所以期待在未来能看到更多的 Capacitor。