返回博客主页
← 所有文章

NativeScript 5.3 - 热模块替换正式支持等

2019 年 3 月 28 日 - 作者 Emil Tabakov

NativeScript 5.3 现已发布,带来了一系列新功能,以改善您的移动应用程序和开发体验。继续阅读以了解 NativeScript 中的新功能和改进的完整列表。

HMR 退出 Beta

热模块替换自发布以来一直处于测试阶段,因为我们一直在努力提高该功能的稳定性。

在最近的两个版本中,我们添加了许多改进、错误修复和完善——在这一点上,我们认为它已经足够稳定,可以供所有人使用。部分改进包括

  • 支持 SASS 文件
  • 支持 Angular 项目,无需额外代码片段
  • 支持 Vue.js 中的脚本更改
  • 确认文件操作(例如从项目结构中添加或删除文件)
  • 支持 VS Code 中的调试

由于最后一个是我最喜欢的——我想展示一下如何在不中断调试会话的情况下,用 HMR 在一分钟内修复“一个超级复杂的错误”。

这绝对不是旅程的终点,我们还有更多更好的改进正在进行中——比如在使用 SideDrawer 或 TabView 时持久化应用程序状态。这些将在下一个版本中发布,但在这一点上,使用 HMR 应该只会给您的开发例程带来改进。

为了让您更容易在项目中切换到使用 HMR,我们引入了一个新的项目级配置。如果您在 nsconfig.json 文件中添加一个新的 "useLegacyWorkflow": false 属性,NativeScript CLI 将在您使用 tns run 命令时自动使用 HMR。有关如何使用此配置的更多详细信息,请参阅 文档

对 iOS 应用扩展的初步支持

iOS 应用扩展 是 iOS 提供丰富、原生应用程序体验的方式。例如,您的应用程序现在可以作为小部件出现在今天屏幕上,在操作表中添加新按钮,在照片应用程序中提供照片滤镜,或显示一个新的系统级自定义键盘。

在 NativeScript 5.3 之前,使用应用程序扩展需要在工具中进行一些自定义体操,才能将应用程序扩展二进制文件部署到正确的文件夹中。我们的目标是提供一种无需编写自定义脚本和容易出错的逻辑即可使用应用程序扩展的方法。理想情况下,应用程序扩展应该可以放到 App_Resources/iOS/extensions 文件夹中,然后 CLI 应该负责将其正确打包和部署。

5.3 版本提供了对“共享”和“今天”扩展类型的支持。该团队将继续在这方面努力,未来该框架应该支持 watchOS 和 tvOS 的扩展,让您的应用程序可以与各种可穿戴设备和电视互动。


一个 NativeScript 应用程序现在如何作为“共享”扩展类型显示的示例。


一个 NativeScript 应用程序现在如何作为“今天”扩展类型显示的示例。

Android 构建速度提升 30%

等待构建完成可以说是您工作日中最不令人满意的经历。

坏消息是,您现在在工作时会有更少的时间用来击剑。我们成功优化了 NativeScript Android 构建过程的很大一部分,根据您的特定应用程序和构建机器,收益可能在 20% 到 35% 之间。

对于我们好奇的读者:瓶颈是由来自原生 Android 依赖项的大量 jar 文件造成的。我们成功优化了查找需要提取的 jar 文件的过程,从而实现了上述提速。

iOS 启动时间提升 10%

使用 NativeScript 构建的 iOS 应用程序也通过此版本获得了性能提升。此处的改进主要体现在应用程序启动时,并在整个应用程序的使用过程中也有一些改进。确切的百分比将再次根据应用程序逻辑、构建配置(webpack、uglify、AOT)等而有所不同。对于一个空白的 iOS 项目,根据构建应用程序时使用的选项,收益显示在 7% 到 13% 之间。

此优化的关键在于在启动时为原生对象创建 JavaScript 对应物。在 5.3 之前,运行时会急切地加载元数据服务发现的所有属性。在 5.3 中,这些属性是延迟加载的,这加快了应用程序的启动时间——尤其是在不经常访问原生属性的情况下。

Webpacked 应用程序中的单元测试

此版本标志着 NativeScript 中巩固单元测试故事的长期努力的第一步。由于 Webpack 越来越成为 NativeScript 工具的重要组成部分,我们认为有必要先从它开始。这意味着,在 5.3 中,您可以运行 tns test <platform> --bundle,这将在 Webpacked 版本的应用程序中针对 NativeScript 应用程序执行单元测试。

在接下来的几个版本中,我们计划开发一个代码覆盖功能,对现有的功能进行完善,并公开针对移动设备的友好选择器。而且,既然我们谈到测试,您是否检查过专门针对 端到端测试 的全新文档部分?它详细介绍了如何使用 Appium 从单个 JavaScript 代码库为 iOS 和 Android 构建 e2e 测试。

两个新插件可用

您可能知道,NativeScript 团队开发并维护着 一组插件。最近,列表中新增了两个新插件,分别是 日期时间选择器选择器。这两个插件都可以帮助您在应用程序中用户需要输入数据的地方,模仿 UI 数据表单 中的字段。


新日期时间选择器插件的示例


新选择器插件的示例

这两个插件都支持 Vue.js 和 Angular,与 Webpack 兼容,并且有 CI 设置到位以确保每个插件的质量。您可以将它们用于您的下一个应用程序!

Webpacked 应用程序中 iOS 调试体验改进

我们在构建过程中使用 Webpack 时,为 iOS 打磨了调试体验。无论您是使用 Chrome 开发者工具还是 VSCode 进行调试,此版本都应该让您的体验轻松无忧。以下是包含改进的完整列表

贡献者

如果没有我们社区的支持,此版本将不会如此出色。我很高兴地说,37 位新贡献者加入了 首次贡献计划,他们抽出时间编写博客文章、新插件,组织聚会,或提交框架代码库的改进。让我们向我们的 GitHub 贡献者致敬,他们在错误修复、文档改进,甚至新功能方面做出了贡献。

BenSjobergimerljakmsaelicesgeznt3hmrmanycherniavskyinathanlschneiderspeiggm-abs KartSriv grgurjyotendraycherniavskyiReshmaPDjpierronthugocarreiracostaadrian-niculescumudlabs000pantherAmitGurbaniikoevskasamtgarson akera-io msaravitzpstrojekacharyaks90

一个非常好的例子是 Matt Saravitznativescript-camera 插件 添加的功能,该功能允许编辑使用 iOS 相机拍摄的图像。此功能已在最新版本的插件中发布,并可供所有人使用。

下一步是什么?

按照 升级说明 获取最新版本。NativeScript 的下一个版本计划在 5 月初发布,我们已经在开发它了。如果您对下一个版本的内容感到好奇,请查看 路线图 的更新版本。