本文系“戏码台”原创,首发于FCC中文社区,感兴趣的小伙伴可以点击“阅读原文”前往FCC中文社区探索更多有意思的事情。如遇超链接无法使用,也请移步“阅读原文”呦。
对开发者来说,就算是同一种语言,我们也可能会在电脑上装数个不同版本的环境,以应对一些历史包袱和复杂多变的客户环境。
所以长远来看,对待任何一门语言的SDK环境,我们都应找到一种方式,合理管理不同的SDK版本。这里我强烈建议你在处理自己电脑的开发环境时,有意识地对SDK版本进行管理,而不是直接上网搜了个最新版的安装包,莫名其妙地装,莫名其妙地用。
别担心,这并不难。各路大神已经把轮子给你造好了。
几乎对任何一门语言,只要你在网上搜索:
xxxLanguage version manager
复制
稍加甄别就能得到自己想要的答案。当然,下面我也把常用的一些语言及环境的version manager
列了出来,供你享用。
* Java——[sdkman](https://sdkman.io)👍
* Java——[jabba](https://github.com/shyiko/jabba)
* Python——[Miniforge](https://github.com/conda-forge/miniforge)👍
* Python——[Anaconda](https://www.anaconda.com)
* Python——[pyenv](https://github.com/pyenv/pyenv)
* Node——[nvm](https://github.com/nvm-sh/nvm)
* Go——[gvm](https://github.com/moovweb/gvm)
* Ruby——[rvm](https://github.com/rvm/rvm)
* PHP——[phpbrew](https://github.com/phpbrew/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
。