使用过 node.js 相比对下面这张图不会陌生,无它就是依赖太重了,压根不知道到底有多深。随之而来的自然而然的是 node.js 版本管理问题,有一些年久失修的库可能不支持最新的 node 版本,同时不同的 node 对应的 npm 版本也有挺大的差别,里面还设计到 node_modules 的依赖管理问题。
因此一个好用的管理 node 版本的工具就孕育诞生了,它就是 nvm (Node Version Manager),可以非常方便的在不同的 node 版本中进行切换,让你随心所欲的跑项目了。
当然本篇的主角是 Flutter。面对 Flutter 的版本快速迭代,与 pub.dev 库的日益增长,许多库受到维护者精力限制,没办法及时跟进 Flutter 的迭代步骤。这其中比较痛苦的一个过程就是迁移到 null-safety,虽然 Flutter 方便迁移的 cli 使用,但是奈何许多的库不支持,因此迁移的过程也是挺曲折的。
当然这些还只是小问题,更多遇到的则是使用旧版本开发的 Flutter 应用。当我需要在本地运行的时候,非常沮丧的发现,它需要比较旧版本的 Flutter,例如 2.8.1、2.5.3 之类的。而我的本级环境虽然没能跟上最新的 Flutter Stable 版本,但好得也升到了 2.10.1。这就造成了:1. 临时降级;2. 再装一个旧版本。
Flutter 的安装基本是都是以 Git 的形式进行的,所以你可以直接在 Flutter 安装目录下进行 Git Tag 的切换,进而切换 Flutter 的版本 (例如分支)。Flutter cli 也是通过切换 Git Tag 来完成的升降级,所以你可以简单的在 Flutter 目录下面执行:
切换完成后还需要执行 flutter doctor,之后会自动下载指定版本的相关产物,完成相关的构建工作。
此方法虽然可以简单切换 Flutter 的版本,但是每次的切换都会重新下载构建许多东西,速度方面一点都没有优势,有时候我们只是简单的想跑几个 Demo 而已。
为了避免来回切换版本带来的开销,另一种方式自然是安装多个 Flutter 版本,然后统一管理,和 nvm 模式一样,但是它叫:fvm。
来看一下安装方式(以 macOS 为例):
有 brew 的加持安装起来还是非常简单的,不需要额外的配置步骤。
还有另外一张方式是作为一个 pub 库来安装
这里需要你已经有 Flutter 环境才可以(至少也要 dart 环境)
这里以 kraken 项目为例,官方支持最高的 Flutter 版本是 2.8.1,因此我们就安装这个版本。
安装完成后,你可以通过 fvm list
查看安装的目录:
fvm 安装的 Flutter 就存在这个目录下面,要方便使用的话还需要额外配置一下目录。
这里以 vscode 为例:
打开“settings.json”配置文件,添加一下新字段:
之后 vscode 就可以检测到当前安装的 Flutter SDK 版本了,可以通过:“Flutter: Change SDK”进行切换。
虽然 IDE 使用的 Flutter 版本已经配置完成,但是在控制台输入 flutter --version
可以发现我们依旧使用的是之前版本的 Flutter,这个时候如果想要全局使用某一个版本的 Flutter,可以如下:
这个时候 fvm
会在安装目录下面创建一个 default
文件夹,链接到指定版本的 Flutter 目录下面:
这里我选择了 2.10.5
这个版本,因此可以看到路径中出现了 versions/2.10.5
的信息。但是这个时候一般是无法正常使用的,因为我们之前还安装过一个 Flutter 版本,为了能正常使用需要配置一下 PATH
环境变量,让 fvm
指向的路径处于一个比较优先的位置,这样我们就能全局使用指定版本的 flutter
了,是不是非常方便?
📌 备注
由于我是直接通过
homebrew
安装的Flutter
因此,这里我选择自己通过brew remove flutter
将之前安装的版本给删掉了哈哈,以后统一使用fvm
进行管理,比较方便。
通过 fvm 可以方便快捷的安装不同版本的 Flutter,让你面对旧项目的时候游刃有余。但是总体来说,还是能使用新版本就上新的版本,因为新的版本往往带来性能等方面的提升。