使用FVM管理Flutter版本时如何在终端动态获取Flutter路径?
解决方案
你遇到的问题核心是fvm通过软链接动态映射flutter版本,硬编码固定路径肯定会随版本切换失效,whereis flutter返回空也是因为fvm的动态软链接不在系统默认的二进制检索目录里,属于正常情况。
不需要手动查flutter安装路径,直接用下面两种方案改脚本就行:
方案1:直接用fvm内置命令(推荐,零维护成本)
fvm本身已经做了全场景的路径适配,不管你当前是在项目目录下用项目指定的flutter版本,还是用全局默认的flutter版本,只要以fvm flutter开头调用命令,就会自动匹配当前生效的flutter版本,完全不用关心实际安装路径在哪。
修改后的完整脚本:
#!/usr/bin/env bash set -uex # 配置国内Flutter镜像源 export PUB_HOSTED_URL=https://mirrors.tuna.tsinghua.edu.cn/dart-pub export FLUTTER_STORAGE_BASE_URL=https://mirrors.tuna.tsinghua.edu.cn/flutter # 调用fvm映射的当前生效flutter执行依赖升级 fvm flutter pub upgrade
这个方案后续不管你切换flutter版本、调整fvm缓存目录、升级fvm本身,脚本都不需要改。
方案2:手动获取动态路径(特殊场景用)
如果你有定制需求必须拿到flutter可执行文件的绝对路径,可以用fvm自带的which子命令获取,脚本里写法如下:
#!/usr/bin/env bash set -uex export PUB_HOSTED_URL=https://mirrors.tuna.tsinghua.edu.cn/dart-pub export FLUTTER_STORAGE_BASE_URL=https://mirrors.tuna.tsinghua.edu.cn/flutter # 动态获取当前生效的flutter可执行文件路径 FLUTTER_BIN=$(fvm which flutter) # 执行升级命令 $FLUTTER_BIN pub upgrade
注意:这个方案要求执行脚本时,要么当前目录是配置了fvm版本的Flutter项目,要么你已经提前设置了fvm全局默认Flutter版本,否则会拿不到路径报错。
之前操作的问题说明
fvm list只会列出所有本地已缓存的Flutter版本,不会标记当前生效版本,要查当前激活版本可以执行fvm currentwhereis命令只会检索系统默认的二进制存储目录,fvm的软链接默认存放在fvm自身的配置目录下,没手动加进系统检索路径的话,查不到结果是正常的。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

