返回博客首页
← 所有文章

NativeScript 4.0 发布了!🎉

2018 年 4 月 13 日 — 作者 Alexander Vakrilov

构建真正原生移动应用程序的最快速方式已经到来 - 让我们一起欢迎 NativeScript 4.0 的发布!

自从我们 上次重大发布(12 月份)以来已经有一段时间了,但这使得 4.0 更加令人兴奋。现在有大量的优秀功能可供使用,等待您,所以立即更新 NativeScript 吧!

npm install -g nativescript

...并且不要忘记 更新您的应用程序的运行时

更新内容:

核心框架和插件

更改应用程序根视图

使用 NativeScript 4.0,您现在可以使用任何 View 作为应用程序的根视图。以前,应用程序的根视图始终是 Frame,您可以在其中使用 Pages 进行导航。现在,您可以灵活地将 TabView 或 RadSideDrawer 作为应用程序的根视图。这使得许多更常用的导航模式成为可能,并允许创建更优化的 UI 树。

让我们看看代码中的示例。使用 NativeScript 4.0,您可以使用以下代码启动应用程序:

application.run({ moduleName: "app-root" });

注意: 我们保留 start() 方法以实现向后兼容性 - 它仍然有效,并且将创建一个根 Frame 并期望指向 Page 的路径。

app-root.xml 中,您仍然可以有一个 Frame 托管页面导航。当在 XML 中定义时,Frame 应该有一个 defaultPage 指向将加载到其中的初始页面。

<Frame defaultPage="main-page-module-name">
</Frame>

现在是重点 - 您可以在 app-root.xml 中放置任何内容。例如,TabView

<TabView>
    <TabViewItem title="Teams">
        <Frame defaultPage="teams-main-page"></Frame>
    </TabViewItem>
    <TabViewItem title="Players">
        <GridLayout>
            <!-- content here -->
        </GridLayout>
    </TabViewItem>
</TabView>

...或 SideDrawer

<SideDrawer>
    <SideDrawer.drawerContent>
        <!-- side drawer content here -->
    </SideDrawer.drawerContent>
    <SideDrawer.mainContent>
        <Frame defaultPage="main-page-module-name"></Frame>
    </SideDrawer.mainContent>
</SideDrawer>

灵活的 Frame 组成

如上例所示 - 现在您可以更灵活地使用 Frame 视图。您甚至可以在应用程序中使用多个 Frame。这对于使用框架实现二级导航很有用,当顶级导航是 TabViewRadSideDrawer 时。

您的应用程序中可能有多个 Frame,而旧的 frame.topmost() 方法可能不够用。现在有几种 新的建议方法 用于获取所需的 Frame 引用。

注意: 在 Angular 中使用多个 Frames(实际上是 Angular 术语中的 <page-router-outlets>)仍然不稳定。团队正在积极解决这个问题,请密切关注 @next 标签!

模态视图更改

我们现在可以将几乎任何东西都显示为模态对话框(示例应用程序)。showModal 方法已从 Page 移动到 View 组件,并且在将某些内容显示为模态视图时,不再限制将 Page 作为根元素。将此与灵活的框架组合功能结合使用,您就可以创建一个具有独立导航的模态对话框!

我们还删除了“一次只能有一个模态”的限制,因此您现在可以在另一个模态对话框中显示一个模态对话框!

更新的模板

好消息!这些技术和最佳实践中的大多数已在 NativeScript 市场中的 NativeScript 应用程序模板 中实现。您现在甚至可以查看和选择每个模板的模板风格(Angular、TypeScript、JavaScript) - 很棒!

nativescript marketplace app templates

企业身份验证模板

作为 NativeScript + Kinvey 集成 的一部分,我们引入了一个新的模板,该模板使使用不同的单点登录提供者进行身份验证变得像切蛋糕一样简单 🥧。充分利用新的 企业身份验证模板 的最佳方法是通过 NativeScript Sidekick 使用它。Sidekick 会为您处理所有 Kinvey 配置,并为您提供一个开箱即用的登录视图。

企业身份验证模板 

NativeScript UI 中的专业 UI 组件

对于 NativeScript 4.0,我们成功地将单片 NativeScript UI 插件拆分为多个独立组件。因此,现在,如果您的应用程序中只使用 ListView,则不需要依赖于 Calendar阅读更多关于“大分手” 和迁移到拆分插件的信息。

在我们的 发布说明 中关注特定拆分组件的更新。

如果您在使用 NativeScript UI 时遇到任何问题,请随时在 NativeScript UI 反馈库 中描述它们。

工具更新

可配置的项目结构

NativeScript 开发人员现在可以配置应用程序文件夹的路径和 App_Resources 文件夹的路径。该配置放置在一个新引入的配置文件中,名为 nsconfig.json。如果缺少配置文件,则将使用 4.0 之前的默认值以确保向后兼容性。

在 Github 上阅读有关 可配置的项目结构 的更多信息。

资产生成

应用程序开发人员的一个常见痛点是,您现在可以根据您提供的一个高分辨率图像生成图标和启动画面!

这是一个很好的节省时间的工具,并消除了开发人员传统上不愿处理的编辑图像的工作。该功能可以通过新的 tns resources generate 命令访问。

tns resources generate icons <path-to-image>

...以及...

tns resources generate splashes <path to image> [--background <color>]

注意: 资产生成也已在 NativeScript Sidekick 中提供!

nativescript sidekick asset generation

在 Github 上阅读有关 资产生成 的更多信息。

与 Webpack 同时进行 LiveSync

NativeScript 开发人员现在可以同时启用 LiveSync 和 Webpack!

此功能可与 tns run <platform> 命令中添加的新标志 --bundle 一起使用。这使得开发人员体验更加出色,并允许您在开发过程中将应用程序打包到 Webpack 中。您遇到的任何问题都将在早期可见,并且更容易修复。

使用 Android Studio 调试 Android 原生问题

使用 NativeScript 4.0,您现在可以在 Android Studio 中打开您的 NativeScript 应用程序,并将其作为原生 Android 项目进行调试。当您想要调查 NativeScript Android 运行时中的问题,或者您想要使用 Android Studio 中的一些原生工具(如 性能分析)时,这将非常有用。

插件开发工作流

经过大量的 讨论和实验,我们成功地在不引入插件中断性更改的情况下,提供了 4.0 版本的所有优势!

虽然所有插件都与 4.0 兼容,但我们仍然建议实施一些插件改进,以便从该版本中获得更多收益。

  • 使用已构建的 .aar 文件发布插件;
  • 确保 npm ignore platforms/android 中的所有文件,除了 include.gradle, *.aar 和 *.jar
  • AndroidManifest 中指定包名;
  • include.gradle 中删除 productFlavors
  • 为了确保插件的 .aar 文件能够自动为您构建,请确保在插件的 package.json 中添加一个 prepare 脚本。 查看此 PR 获取示例。检查所有内容如何工作的一个简单方法是克隆插件种子并按照步骤运行演示。

要详细了解这些更改的优缺点,您可以查看 Github 上 nativescript-plugin-seedandroid-runtime 存储库中的讨论。

Sass 插件改进

Sass 文件处理方式有两项重大改进。

其他内容

如果您需要有关所有特定功能和修复的更多详细信息,请查看 Github 上的 更改日志

但您可能在想:“这很棒,但接下来会发生什么?!”我们已经改进了 nativescript.org 的 路线图和发布 部分,因此您应该查看它以了解 2018 年的计划!

感谢您!

感谢我们 SlackNativeScript 论坛 中的社区,因为我们已经拥有超过 6400 名 Slack 用户和 2000 多名论坛注册用户!

最后,向所有通过向框架、文档和插件提交 PR 来帮助改进 NativeScript 的您表示衷心的感谢。我们感谢您的辛勤工作和参与!🤗

Gustavo47 slsumathi dbenninger sudhanshu-15 breningham ddfreiling davecoffin Buuhuu evanfuture shiv19 ikoevska justindujardin madmas noumaans kant triniwiz PeterStaev macknelson tsira stevo-knievo saknarak doorb02 tonymporter TechnicalSoup tadeucariolano airandfingers AlvinKonda MonsieurMan benjlin clounie celso-wo chrants chrismullins DrQwertySilence jayoma jurgentreep kharysharpe shiv19 marablayev mrcaste mhrabiee nicoeg pzanitti pdvorchik 000panther rajatraj733 rakeshgirase ffxsam sean-perkins jalkoby eyal7773 devoto13 pedromorgan noumaans jonnysamps surdu paulpv ikoevska hypery2k NathanWalker dnadoba dean-huczok briandilley DickSmith Icer2000 Ablankzin akang surdu Liooo hettiger MrVonkey manojdcoder fwilkens