对开发者来说,就算是同一种语言,我们也可能会在电脑上装数个不同版本的环境,以应对一些历史包袱和复杂多变的客户环境。
所以长远来看,对待任何一门语言的SDK环境,我们都应找到一种方式,合理管理不同的SDK版本。这里我强烈建议你在处理自己电脑的开发环境时,有意识地对SDK版本进行管理,而不是直接上网搜了个最新版的安装包,莫名其妙地装,莫名其妙地用。
别担心,这并不难。各路大神已经把轮子给你造好了。
几乎对任何一门语言,只要你在网上搜索:
xxxLanguage version manager
稍加甄别就能得到自己想要的答案。当然,下面我也把常用的一些语言及环境的version manager
列了出来,供你享用。
- Java——sdkman👍
- Java——jabba
- Python——Miniforge👍
- Python——Anaconda
- Python——pyenv
- Node——nvm
- Go——gvm
- Ruby——rvm
- PHP——phpbrew
这些工具的使用大同小异,咱们前后端各选一个代表测试一下,下面先来演示node
的管理环境nvm
。
安装
直接在终端里执行这句话即可:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
使用
配置完毕后,打开一个新的终端,可以通过nvm ls-remote
列出所有可用的node
版本了,如果只想查看lts
版本,可以通过追加参数实现,nvm ls-remote --lts
。确认要安装的版本后,就可以通过nvm install v15.11.0
的方式安装了。如果你安装了多个版本,需要在不同版本间切换,只需要简单的使用nvm use v15.11.0
就可以进行版本切换了。
更多
关于nvm
的使用,还有很多功能有待你来发掘,具体可以执行nvm --help
获得更多有用信息。顺便一提,用nvm
在ARM
架构的Mac
电脑上安装node
的时候,是基于node
的源码进行本地编译安装的,因而你将获得一个ARM
版本的node
,这点对正在使用M1
芯片Mac
的小伙伴非常友好。
介绍完了前端,咱们再来看看后端,这里以Java
的sdkman
进行演示。
安装
也是非常简单,一句话的事。
curl -s "https://get.sdkman.io" | bash
使用
列出可用的Java(JDK)
版本,执行sdk list java
即可,然后通过执行sdk install java 15.0.2-zulu
就可以安装你需要的JDK
版本了。
额外说一句,如果是ARM
架构的Mac
其实是支持x86
和ARM
两种架构的JDK
的,只是前者要经过MacOS
的Rosetta2
的转译,大部分情况下我们为了追求性能想使用ARM
版本的JDK
,此时你可以更改sdkman
的配置文件,vim ~/.sdkman/etc/config
,找到sdkman_rosetta2_compatible
那一行,如果设置成true
,就仅显示ARM
版本的JDK
了。
如果你安装了多个版本的JDK
,一样可以通过sdk use java 8.0.275-amzn
的方式进行切换。如果你想改变全局环境的默认JDK
版本,则可以使用sdk default java 8.0.275-amzn
进行设置。
其他
sdkman
除了支持JDK
的版本管理外,还支持Java
系的很多技术栈,比如:Gradle
、Maven
、Kotlin
、Groovy
等。所以如果你有这方面需求的话,记得执行sdk --help
探索更多有用功能哦。
八卦
其实关于sdkman
还有一段有意思的往事,曾经sdkman
的名字是gvm
,专门用来管理一门自2003
年就存在的Groovy
语言,这门语言跟Java
一样,也是运行在JVM
(Java虚拟机)上的。
但是后来程序界又迎来了另一个G
姓语言——Go
,越来越多的小伙伴希望gvm
这个名字能见文知意,用作Go
的版本管理,而不是去管理一个小众的JVM
语言。
于是在2015年,之前维护gvm
的小伙伴,宣布了gvm
改名为sdkman
,从而把gvm
的使用权交给了Go Version Manager
。