三微授渔确保依赖关系永不过时的新工具,Dart2.8发布-更快的打包工具

2020年5月6日 , Dart产品经理迈克尔·汤姆森宣布发布Dart2.8版本 , 并且Dart2.8还带来了Dart语言和库中的一些小突破 。 这些更改为我们的第一个版本的
null安全功能奠定了基础 。
三微授渔确保依赖关系永不过时的新工具,Dart2.8发布-更快的打包工具
文章图片
突破性变革为零安全铺平道路
【三微授渔确保依赖关系永不过时的新工具,Dart2.8发布-更快的打包工具】应用程序崩溃的常见原因是尝试使用恰好是的变量的代码null 。 在1965年推出空引用名言称他们为他的“数十亿美元的错误”在2009年的QCon谈话 。 在某些情况下 , 空值很有用;面临的挑战是将那些情况与不存在的情况区分开 。 在过去的一年中 , 汤姆森表示他们一直在忙于为Dart中的声音无效安全性提供支持 。 这种支持将扩展类型系统以表示始终不可为空的变量 , 但除此之外 , 该类型系统将是完全可靠的:Dart编译器和运行时将能够信任这些类型 , 并能够在以下情况下生成优化的代码:类型系统保证变量不为空 。
可以想象 , 这是一项庞大的任务 , 其中包含许多活动部件 。 为了确保我们可以使用干净的语义构建null安全性 , Dart开发团队决定对Dart语言和库进行一些小的突破性更改 。 这些重大更改对Dart类型系统的一些特殊情况和一些Dart核心库进行了较小的调整 , 以确保与可空性相关的可用性和性能 。 我们希望这些重大更改的实际影响(在Dart公告列表中预先宣布)对常规应用程序代码的影响很小 。
更高质量的包装生态系统
pub软件包管理器和pub.dev站点为Dart和Flutter提供了一个不断发展的生态系统 。 pub.dev上提供了将近10,000个软件包 , 令人惊讶的是 , 许多有趣的软件包被共享 。 汤姆森表示帮助包作者创建高质量的包并帮助应用程序开发人员找到这些包是Dart开发团队的核心任务 , 例如 , 添加了改进的pub.dev发现了已验证的发布者和Flutter收藏夹 。
今天 , Dart开发团队宣布从pub.dev信息库检索软件包时的性能要快得多 , 并且它提供了一个新工具来帮助我们保持所有软件包依赖关系的更新 。 随着现代应用程序的复杂性 , 我们的应用程序可能依赖于数十个软件包 。 但是 , 如何确保将它们全部更新为最新版本 , 以确保获得最新的依赖关系以及所有可用的错误修复和性能改进?从Dart2.8开始 , 我们可以使用puboutdated , 这是一种新工具 , 用于自动确定需要将哪些依赖项更新为最新和最新版本 。
Dart2.8Pub工具的性能改进
通过添加对运行时并行获取软件包的支持pubget以及推迟pubrun预编译 , Dart开发团队优化了pub工具的性能 。
在运行flutterpubget用创建的新项目的非正式基准中fluttercreate , 总执行时间从Flutter1.12(使用Dart2.7)中的大约6.5秒减少到Flutter1.17(Dart2.8)中的2.5秒 。 在更大的应用程序(例如Fluttergallery)中 , 时间从大约15秒减少到大约3秒!
管理其依赖的Puboutdated
Dart代码中的依赖项被捕获在pubspec文件中 。 当我们通过运行命令从pub.dev中检索软件包时pubget , pub版本解释器(使用PubGrub算法)将运行一个过程 , 以确定满足我们从pubspec中列出的约束的所有依赖项的最新可能版本集 。 请注意 , pub使用单版本方案 , 其中每个软件包都包含在应用程序中的仅单版本中;这是一项重要的优化措施 , 可确保我们的应用大小尽可能的小 。
让我们考虑一个具体的例子 。 假设你正在构建一个应用程序 , 它pubspec.yaml包含以下内容:
dependencies:foo:^1.3.0bar:^2.0.0
你运行pubget , 该工具将创建一个pubspec.lock具有以下版本的文件:
packages:foo:version:''1.3.0''bar:version:''2.0.1''
几个月过去了 , pub.dev现在具有foo(1.3.1)和bar(2.1.0和3.0.3)的新版本 。 那么我们应该如何发现这些新版本可用?对于次要的版本升级(foo1.4.0和bar2.1.0) , 我们仍然可以运行pubupgrade , 但是却不会不会给你推送bar3.0.0 。 要发现新版本 , 我们必须访问pub.dev上的每个软件包并查看其最新版本 。 另外 , 我们可以使用社区解决方案 , 例如PaulinaSzklarska的版本检查器或JeroenMeijer的pubspec助手 。