flutter依赖管理
# flutter依赖管理
推荐直接看官方文档
参考: dependencies (opens new window)
# 特点
- 源码依赖
- 依赖传递,依赖冲突处理方面远弱于maven,只是cocopods级别
# 问题
如果查看/输出整棵依赖树?
间接依赖的库的api无法调用?必须再次声明那个库才能调用.
如何输出每次发版的依赖具体版本/git commit--> pubspec.lock文件
如何强制依赖? --> 直接写具体版本号就行,不要写动态版本号
依赖冲突时怎么解决?---> dependency_overrides 写法:
https://juejin.cn/post/6844903746061729806
dependencies: some_package: other_package: # 这里: dependency_overrides: url_launcher: '0.4.3'
1
2
3
4
5
6和Android的这种写法等价:
configurations.all { resolutionStrategy { force 'com.google.guava:guava:23.0-android' } }
1
2
3
4
5ios CocoaPods 没有锁定版本功能,弱鸡.
如何排除依赖?
一般是两个依赖库里有类名重复,所以需要排除一个. 但dart不提供排除的功能,而是提供导入时别名的功能:
这种编译时异常,只出现在同一个类中导入同名类时发生. 并没有java那种编译器严格校验所有包的所有类名的严格校验方式.
拉取依赖如何加速?
第一组:
变量名称:FLUTTER_STORAGE_BASE_URL
变量值:https://storage.flutter-io.cn
第二组:
变量名称:PUB_HOSTED_URL
变量值:https://pub.flutter-io.cn
2
3
4
5
6
7
- 如何私有化部署依赖仓库?
# 版本号规则
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
- 主版本号:当你做了不兼容的 API 修改,
- 次版本号:当你做了向下兼容的功能性新增,
- 修订号:当你做了向下兼容的问题修正。
any # 所有版本,等同于不写。对pub运行性能有影响,不推荐
1.2.3 # 明确的版本号
'>=1.2.3' # 还有 >1.2.3, <=1.2.3, <1.2.3
^1.2.3 # Caret syntax 等同于 >=1.2.3 <2.0.0
2
3
4
# 1 写法
依赖可以放到pub.dev, 本地文件,以及git
# 0.pub.dev
dependencies:
transmogrify: ^1.0.0
2
# 1.私有化部署的pub
dependencies:
zq_log:
version: ^0.0.1
hosted:
name: zq_log
url: http://192.168.x.xx:4000/
# 简写
dependencies:
zq_log:
hosted: https://some-package-server.com
version: ^1.4.0
2
3
4
5
6
7
8
9
10
11
12
13
# 2. Local - Save in some local folder
dependencies:
library_name:
path: /path/to/library_name
2
3
# 3. Hosted - Pushed on Github, Gitlab etc.
git需要每个依赖都搞一个工程,比较蛋疼
dependencies:
library_name: xxxx
git: https://github.com/username/library_name
2
3
Or to target specific branch
dependencies:
library_name: xxxx
git:
url: https://github.com/username/library_name.git
ref: dev #branch name
2
3
4
5
Or to target specific commit
dependencies:
library_name:
git:
url: https://github.com/username/library_name.git
ref: e234072340 #commit reference id
2
3
4
5
# 覆写
dependencies:
transmogrify: ^1.2.0
dependency_overrides:
transmogrify:
path: ../transmogrify_patch/
# 或覆写版本号:
dependencies:
transmogrify: ^1.2.0
dependency_overrides:
transmogrify: '3.2.1'
2
3
4
5
6
7
8
9
10
11
# 输出依赖树:
https://dart.dev/tools/pub/cmd/pub-deps
并不是tree,只有两层
flutter pub deps --no-dev
--json: json格式输出
# 2 pub私有化部署
参考Flutter 搭建私有 Pub 仓库 Docker 部署 (opens new window)
使用字节的unpub, 用docker compose一键部署
如下所述:
首先拉取 GitHub 地址 (opens new window) 代码,安装 docker (opens new window) 环境, 然后执行下面命令即可
https://github.com/zeqinjie/unpub-2.0.0-docker
# 先安装 docker 环境启动后, 在当前 docker-compose.yml 文件下执行下面命令即可
docker-compose up -d
2
发包:
flutter packages pub publish
需要配置: publish_to
name: pkg_test_unpub
description: A new Flutter package project.
version: 0.0.3
homepage: https://juejin.cn/
publish_to: https://pub.xxx.com/
2
3
4
5