前言
因为项目中的两个node项目使用了不同的node版本,所以需要用到node的版本管理工具nvm;
nvm全称 node version manager ,意思就是node版本管理器;
今天主要以Centos环境来介绍;
目录
- 安装nvm
- 遇到的问题
- nvm相关命令
正文
1. 安装nvm
命令如下:
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
这条命令的意思是:下载install.sh
安装脚本,然后通过bash
命令运行该脚本,即bash install.sh
;
安装成功后,有几个路径需要注意:
-
nvm的安装路径默认为:
~/.nvm
,如下所示 -
nvm的路径配置文件为:
~/.bashrc
,如下所示:最下面的三行就是nvm相关配置
.bashrc文件:用来加载你的配置,bash 在每次启动时都会加载
.bashrc
文件的内容。每个用户的 home 目录都有这个 shell 脚本。它用来存储并加载你的终端配置和环境变量。
2. 遇到的问题
这里安装nvm时遇到了几个问题:
问题一:卡在如下位置,最后提示连接超时
=> Downloading nvm from git to '/root/.nvm'
=> Initialized empty Git repository in /root/.nvm/.git/
error: The requested URL returned error: 403 Forbidden while accessing https://github.com/nvm-sh/nvm.git/info/refs
fatal: HTTP request failed
Failed to clone nvm repo. Please report this!
这个就是纯纯的网络问题,多尝试几次就可以了;
问题二:提示无法识别 git -c
命令(该命令用来设置git的环境变量),报错如下所示:
# 。。。省略
Unknown option: -c
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path]
[-p|--paginate|--no-pager] [--no-replace-objects]
[--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
[--help] COMMAND [ARGS]
Failed to checkout the given version v0.39.1. Please report this!
原因是我的git版本过低 1.7.1:
[root@iZ25rlowqlfZ .nvm]# git --version
git version 1.7.1
而 git -c
是在较新版本中才有的命令,目前最新的git版本为2.36.1
所以这里面临两个选择:
-
一个是升级git版本:但是因为我是Centos6.5系统,通过
yum install git
升级时,发现只支持到1.7.1,如下所示:[root@iZ25rlowqlfZ ~]# yum install git # 。。。省略 Error Downloading Packages: perl-Git-1.7.1-10.el6_10.noarch: failure: Packages/perl-Git-1.7.1-10.el6_10.noarch.rpm from updates: [Errno 256] No more mirrors to try. git-1.7.1-10.el6_10.x86_64: failure: Packages/git-1.7.1-10.el6_10.x86_64.rpm from updates: [Errno 256] No more mirrors to try.
git官网也有提示::
意思是目前 Red Hat 和 CentOS等系统 只提供了旧版本的git镜像,只能通过源码编译或者去第三方库拉取;
感觉这种方式有点麻烦,所以放弃了
-
另一个是删除
install.sh
脚本中对应的git -c
命令:因为查看了一下脚本中相关的git -c
命令,发现不影响nvm的使用,相关代码如下:command git -c advice.detachedHead=false --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" checkout -f --quiet FETCH_HEAD || { nvm_echo >&2 "Failed to checkout the given version $NVM_VERSION. Please report this!" exit 2
这里的
advice.detachedHead=false
意思是:不提示 detachedHead 相关的信息,它类似于一个警告信息,默认是开启的;关于 detachedHead 可以参考这篇文章:Git中的detached状态
删除后的脚本如下所示:
command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" checkout -f --quiet FETCH_HEAD || { nvm_echo >&2 "Failed to checkout the given version $NVM_VERSION. Please report this!" exit 2
接着再次运行该脚本:
[root@iZ25rlowqlfZ D]# bash install.sh => nvm is already installed in /root/.nvm, trying to update using git => Your version of git is out of date. Please update it! => Compressing and cleaning up git repository => nvm source string already in /root/.bashrc => bash_completion source string already in /root/.bashrc /usr/bin/env: node: No such file or directory => Close and reopen your terminal to start using nvm or run the following to use it now: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
可以看到,这次成功安装了nvm;
3. nvm相关命令
查看所有的node版本:nvm ls
[root@iZ25rlowqlfZ .nvm]# nvm ls
N/A
iojs -> N/A (default)
node -> stable (-> N/A) (default)
unstable -> N/A (default)
可以看到,此时本地安装的node版本为空,下面就需要安装对应的版本;
安装之前可以先查看远程仓库有哪些node版本:nvm ls remote
[root@iZ25rlowqlfZ ~]# nvm ls-remote
# 。。。省略
v16.12.0
v16.13.0 (LTS: Gallium)
v16.13.1 (LTS: Gallium)
v16.13.2 (LTS: Gallium)
v16.14.0 (LTS: Gallium)
v16.14.1 (LTS: Gallium)
v16.14.2 (LTS: Gallium)
v16.15.0 (Latest LTS: Gallium)
# 。。。省略
v18.1.0
v18.2.0
其中还提示了是否为 LTS 长期支持版本;
安装对应的node版:nvm install version
先安装一个10.24,如下所示:
[root@iZ25rlowqlfZ .nvm]# nvm install 10.24
Downloading and installing node v10.24.1...
Downloading https://nodejs.org/dist/v10.24.1/node-v10.24.1-linux-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v10.24.1 (npm v6.14.12)
再安装一个12.16,如下所示:
[root@iZ25rlowqlfZ .nvm]# nvm install 12.16
Downloading and installing node v12.16.3...
Downloading https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v12.16.3 (npm v6.14.4)
Creating default alias: default -> 12.16 (-> v12.16.3)
此时查看node版本:node -v
[root@iZ25rlowqlfZ .nvm]# node -v
v12.16.3
说明后安装的会代替前面安装的,被选中作为node的默认版本;
查看node安装路径:which node
[root@iZ25rlowqlfZ ~]# which node
/root/.nvm/versions/node/v12.16.3/bin/node
可以看到,node安装在.nvm
目录下,不同的版本安装在不同的versions目录下;
这样很明显的一个好处就是:各个node版本安装的依赖,都存放在各自的目录,互不影响
切换node版本:nvm use version
[root@iZ25rlowqlfZ lib]# nvm use 10.24
Now using node v10.24.1 (npm v6.14.12)
这样就从12.16切换到了10.24;
如果不清楚都安装了哪些版本,可以通过上面的nvm ls
查看:
[root@iZ25rlowqlfZ lib]# nvm ls
-> v10.24.1
v12.16.3
default -> 12.16 (-> v12.16.3)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v12.16.3) (default)
stable -> 12.16 (-> v12.16.3) (default)
lts/* -> lts/gallium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.19.3 (-> N/A)
lts/gallium -> v16.15.0 (-> N/A)
可以看到,此时选中的是10.24,但是默认版本是12.16,因为12.16是后安装的,所以被选为默认版本;
此时如果重新开一个终端,运行node -v
会发现又变回了默认版本12.16;
设置node默认版本:nvm alias default version
[root@iZ25rlowqlfZ ~]# nvm alias default 10.24
default -> 10.24 (-> v10.24.1)
可以看到,此时默认版本设置为10.24,不过需要重启终端才会生效;
总结
- 安装:
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
;- nvm的安装路径默认为:
~/.nvm
- nvm的路径配置文件为:
~/.bashrc
- nvm的安装路径默认为:
- 问题:
- 如果提示连接超时,多试几次即可
- 如果提示无法识别
git -c
命令,可以升级git到最新版本2.36.1;或者删除掉install.sh中的git -c
相关的那个配置
- 命令:
- 查看所有的node版本:
nvm ls
- 查看远程仓库有哪些node版本:
nvm ls-remote
- 安装对应的node版:
nvm install version
- 查看node版本:
node -v
- 查看node安装路径:
which node
- 切换node版本:
nvm use version
- 设置node默认版本:
nvm alias default version
- 查看所有的node版本:
评论区