18 | 依赖管理(二):第三方组件库在Flutter中要如何管理?
该思维导图由 AI 生成,仅供参考
Pub
- 深入了解
- 翻译
- 解释
- 总结
Flutter中的依赖管理是开发过程中的重要环节,通过pubspec.yaml文件可以管理工程代码的依赖,包括第三方库、Dart运行环境、Flutter SDK版本等。Dart提供了包管理工具Pub,用于管理代码和资源,类似于Android中的JCenter/Maven、iOS中的CocoaPods、前端中的npm库。Pub提供了官方的包仓库,通过它可以方便地查找到有用的第三方包。在pubspec.yaml中,可以声明应用的版本、Dart运行环境支持、外部依赖等信息。依赖包可以通过路径依赖或Git依赖的方式声明,同时也支持版本约束。Pub会根据声明的依赖信息,下载对应版本的包,并创建.pubspec.lock文件记录实际安装的各个直接依赖、间接依赖的包的具体来源和版本号。除了提供功能和代码维度的依赖,包还可以提供资源的依赖,可以通过package参数复用依赖包中的资源。 在Flutter中,资源与工程代码依赖属于包管理范畴,采用包的配置文件pubspec.yaml进行统一管理。 可以通过pubspec.yaml设置包的元数据(比如,包的名称和版本)、运行环境(比如,Dart SDK与Fluter SDK版本)、外部依赖和内部配置。 对于依赖的指定,可以以区间的方式确定版本兼容范围,也可以指定本地路径、Git、Pub这三种不同的数据源。包管理工具会找出同时满足每个依赖包版本约束的包版本,然后依次下载,并通过.packages文件建立下载缓存与包名的映射,最后统一将当前状态下,实际安装的各个包的具体来源和版本号记录至pubspec.lock文件。 现代编程语言大都自带第依赖管理机制,其核心功能是为工程中所有直接或间接依赖的代码库找到合适的版本。Dart使用的Pub依赖管理机制所采用的算法设计,可以有效减少依赖管理器为你寻找代码库依赖版本所耗费的时间。如果工程里的依赖比较多,并且依赖关系比较复杂,一个简单的做法就是在pubspec.yaml文件中固定那些依赖关系复杂的第三方库们,及它们递归依赖的第三方库的版本号。 思考题: 1. pubspec.yaml、.packages与pubspec.lock这三个文件,在包管理中的具体作用是什么? 2. .packages与pubspec.lock是否需要做代码版本管理呢?为什么? 总结:Flutter中的依赖管理是关键的开发环节,通过pubspec.yaml文件管理工
《Flutter 核心技术与实战》,新⼈⾸单¥59
全部留言(18)
- 最新
- 精选
- 许童童pubspec.yaml、.packages 与 pubspec.lock 这三个文件,在包管理中的具体作用是什么? pubspec.yaml是声明依赖哪些包的配置文件 .packages是表示包在本地目录缓存的地址 pubspec.lock是把依赖锁死的文件 只有pubspec.yaml需要自己编写 其它两个文件会自动生成。 .packages 与 pubspec.lock 是否需要做代码版本管理呢?为什么? pubspec.lock需要做版本管理,因为lock文件把版本锁定,统一工程环境 .packages不需要版本管理,因为跟本地环境有关,无法做到统一
作者回复: 赞
2019-08-0844 - 哗啦啦想问下老师 。我在ROW 中有3个widget ,想实现 3个widget 的高度填充整个ROW (即3个子widget 中高度最大的那个的高度 ) ,请问有什么好办法能实现 ,我更换了交叉轴对齐方式为 CrossAxisAlignment.stretch 也不行 。感谢 卡了很久这个问题
作者回复: 你是想让Row的高度跟随最高的Widget,其余的Widget高度也调整到跟这个Widget一样是吗? 试试在外层包一层IntrinsicHeight: Widget build(BuildContext context) { return Scaffold( appBar: AppBar( // Here we take the value from the MyHomePage object that was created by // the App.build method, and use it to set our appbar title. title: Text(S.of(context).main_title), ), body:ListView( children: <Widget>[ IntrinsicHeight( child: Row( children: <Widget>[ Expanded(flex: 1, child: Container(color: Colors.blue,height: 300,)), Container(color: Colors.red,width: 50), Container(color: Colors.yellow,width: 50,height: double.infinity,), ])), Row( children: <Widget>[ Expanded(flex: 1, child: Container(color: Colors.blue,height: 300,)), Container(color: Colors.red,width: 50,height: 100,), Container(color: Colors.yellow,width: 50,height: 100,), ]) ], ) ); }
2019-08-12212 - 和小胖老师请问下,^0.1.2 这个版本号中的 ^ 是什么意思呢?
作者回复: ^version表示向后兼容的一个版本范围。比如,^1.2.3相当于'>=1.2.3<2.0.0',^0.1.2相当于'>=0.1.2<0.2.0'。
2019-09-0536 - 和小胖1、pubspec.yaml 算是对 flutter 项目配置的管理,类似于 Android 中的 gradle,这些配置包括:项目名称(但是如果桌面的应用名称还得去具体平台的项目里面修改)、项目描述 、各种资源(资源包括图片、文件、字体等),图片文件等资源需要在 yaml 文件中的 assets 标签下配置,字体需要在 fonts 标签下配置; 当然也有项目依赖 dart sdk 的版本配置,项目所依赖的第三方库的配置,而这些第三方库可以是远程 pub 仓库(类似于 jcenter/maven),也可以是 git 仓库,还可以是 本地的依赖库。 .packages 文件里面配置了远程依赖库下载到本地的路径,是一种映射关系。 pubspec.lock 文件里面则是配置了远程依赖库的具体信息,包括依赖库名称、版本号以及依赖地址。里面也有 dart sdk 的版本号。 2、.packages 是不需要版本管理,也不需要提交至远程仓库,应当对它添加忽略,因为它是与本地的映射,每个人的本地目录是不同的;pubspec.lock 则是需要版本管理的,因为他里面记录了具体的依赖信息。
作者回复: 太赞了👍
2019-09-055 - 汪帅我一直比较关心的还是关于第三方官方库支持情况,例如地图,即时通讯,音视频等等!安卓我倒是可以解决就是iOS我不会还是需要纯flutter的
作者回复: 音视频这类插件已经有比较丰富的第三方插件支持了,Pub上有很多,你可以选一个Star和评分相对高些的,像声网这样专业的音视频公司也有专门的SDK做Flutter音视频通信; 地图插件大都基于Google Map,可以耐心等待国内的地图厂商提供Flutter插件版本; 即时通讯目前没有特别好的Flutter插件,建议可以通过混合开发的方式把IM能力融合到Flutter应用中。 即时通讯
2019-08-0833 - davidzhou只是不太明白image.asset使用的是一个完整的uri,如果项目内图片资源比较多,我希望图片资源进行目录分类,那个路径就相对较长,如果是iOS的话,统一在一个地方创建xx.imageset就可以直接使用这个图片标识符了
作者回复: 如果你的资源目录层次比较清晰,资源比较多,可以在外部再包一层,简化调用参数
2019-08-0832 - Carlo依赖管理中的版本冲突很麻烦。pub每个包只下载一个版本。这就造成了如果第三方库很旧,依赖了A包很老的版本。如果我在自己的工程中用了A包最新版本。那就会造成冲突。请问这种情况怎么解决?
作者回复: 把所有依赖(及其递归依赖)及版本号展开都写到pubspec文件中就可以了
2019-10-141 - 巫山老妖思考题1 : - pubspec.yaml(设置包的元数据(比如,包的名称和版本)、运行环境(比如Dart SDK与Flutter SDK版本)、外部依赖和内部配置) - .packages(将依赖包名与系统缓存中的包文件路径进行映射,方便后续维护) - pubspec.lock(用于记录当前状态下实际安装的各个直接依赖、间接依赖的包的具体来源和版本号) 思考题2: .package文件不用托管,因为这个文件是自动生成的,存储的是包映射的是本地路径,不同开发环境路径不一样。 pubspec.lock需要托管,每次变更版本都会更新这个文件,我们也能知道实际安装版本。
作者回复: 非常棒👍
2019-10-061 - 毛哥来了是否跟package.json一样也支持 ~1.2.3 这样的格式
作者回复: 不支持,只能用^
2019-10-25 - kkliupubspec.yaml设定引用第三方SDK的版本范围,如果要指定对应版本可以直接在pubspec.lock 文件里指定sdk的版本号?
作者回复: 无论什么时候需要指定版本都是直接改pubspec.yaml,然后重新安装。pubspec.lock文件是Pub包管理器根据依赖关系图自动生成的,不能自己手动改。
2019-09-29