1. 为什么pub get会卡在Resolving dependencies?
当你第一次运行flutter pub get或者添加新依赖后执行这个命令时,最让人抓狂的就是看着命令行卡在"Resolving dependencies..."一动不动。这种情况在国内尤其常见,我刚开始用Flutter时也经常遇到,有时候一等就是十几分钟,甚至直接超时失败。
根本原因在于Flutter默认的包管理仓库pub.dev服务器在国外,而国内网络访问这些服务器时经常会遇到各种问题。解析依赖阶段需要从服务器获取所有依赖包的元数据信息,包括版本号、依赖关系等,这个过程对网络稳定性要求很高。一旦网络出现波动或者延迟较高,就会卡在这个环节。
2. 国内镜像源的选择与对比
2.1 官方中国镜像
Flutter官方为中国开发者提供了专门的镜像服务,这是最稳定可靠的选择。它由Flutter团队直接维护,更新及时,与主仓库保持同步。配置方法很简单:
export PUB_HOSTED_URL=https://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn我在多个项目中使用这个镜像,下载速度通常在1-2MB/s,比直接连接国外服务器快很多。不过高峰期偶尔也会出现速度下降的情况。
2.2 上海交通大学镜像
上海交通大学的镜像源是另一个不错的选择,更新频率也很高:
export FLUTTER_STORAGE_BASE_URL=https://mirrors.sjtug.sjtu.edu.cn/ export PUB_HOSTED_URL=https://dart-pub.mirrors.sjtug.sjtu.edu.cn/这个镜像的优点是服务器位于教育网内,对于校园网用户特别友好。实测在教育网环境下速度可以跑满带宽。
2.3 清华大学TUNA镜像
清华大学TUNA镜像在国内开发者中也很受欢迎:
export PUB_HOSTED_URL="https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"如果想临时使用清华镜像,可以直接在命令前加上环境变量:
PUB_HOSTED_URL="https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" flutter pub get清华镜像的更新周期大约是每4小时同步一次,对于大多数项目来说完全够用。
3. 不同操作系统的配置方法
3.1 Windows系统配置
Windows用户可以通过修改环境变量来配置镜像源:
- 右键"此电脑" → 属性 → 高级系统设置 → 环境变量
- 在"用户变量"或"系统变量"中新建两个变量:
- PUB_HOSTED_URL = https://pub.flutter-io.cn
- FLUTTER_STORAGE_BASE_URL = https://storage.flutter-io.cn
- 保存后重启所有命令行窗口
我建议在Android Studio或VSCode中也重启一下,确保所有终端都能获取到新的环境变量。
3.2 macOS/Linux系统配置
对于macOS和Linux用户,最方便的做法是修改shell配置文件:
echo 'export PUB_HOSTED_URL=https://pub.flutter-io.cn' >> ~/.zshrc echo 'export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn' >> ~/.zshrc source ~/.zshrc如果你使用的是bash,把.zshrc换成.bashrc或.bash_profile即可。这个配置会永久生效,以后打开任何终端窗口都会自动使用镜像源。
4. 验证配置是否生效
配置完镜像源后,如何确认真的生效了呢?我通常用这几个方法验证:
- 执行
flutter pub get时观察下载速度,正常应该明显变快 - 查看日志输出,如果看到类似"Downloading packages from https://pub.flutter-io.cn..."就说明在使用镜像
- 可以临时删除环境变量对比速度差异
有时候即使配置了镜像还是会卡住,这时候可以尝试:
flutter pub cache repair flutter clean flutter pub get这个组合命令会清理缓存并重新获取依赖,解决了很多奇怪的问题。
5. 常见问题排查
5.1 配置了镜像但还是慢
这种情况我遇到过几次,通常有几个原因:
- 环境变量没有正确加载 - 试试新开一个终端窗口
- 项目中的某些依赖指定了绝对路径 - 检查pubspec.yaml
- 镜像服务器临时故障 - 换一个镜像源试试
5.2 镜像源不同步导致的问题
镜像源和主仓库之间存在同步延迟,偶尔会出现版本不一致的情况。如果你遇到依赖解析错误,可以:
- 检查镜像源上是否有你需要的版本
- 临时切换回官方源获取最新包
- 等待几小时让镜像同步完成
5.3 公司内网的特殊配置
有些公司的网络环境比较特殊,可能需要额外配置代理。这种情况下建议联系IT部门获取正确的代理设置,然后在Flutter命令前加上代理参数:
export http_proxy=http://company-proxy:port export https_proxy=http://company-proxy:port flutter pub get6. 其他优化技巧
除了配置镜像源,还有一些小技巧可以提升依赖解析速度:
- 精简pubspec.yaml中的依赖,只保留真正需要的包
- 指定依赖版本范围而不是使用any,减少解析复杂度
- 定期运行
flutter pub upgrade保持依赖更新 - 使用
flutter pub get --offline在无网络情况下使用缓存
对于大型项目,依赖解析可能会消耗较多内存。如果遇到内存不足的问题,可以尝试增加Dart VM的内存限制:
export DART_VM_OPTIONS='--old_gen_heap_size=4096'7. 长期维护建议
配置镜像源不是一劳永逸的事情,我建议:
- 定期检查镜像源是否仍然可用
- 关注Flutter社区关于镜像源的更新
- 在团队项目中统一镜像源配置
- 把镜像配置写入项目文档,方便新成员快速上手
我在团队项目中通常会创建一个setup.sh脚本,包含所有必要的环境配置,新成员只需要运行这个脚本就能完成开发环境搭建。