node.js 多版本管理 nvm的安装和使用
# 安装nvm # 项目链接 #https://github.com/nvm-sh/nvm #1、 安装与更新 使用 curl 或 wget curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash # 或 wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash # 2、执行完以上命令后,会在当前用户目录的.bashrc 文件(即 ~/.bashrc)中自动追加类似以下的配置代码 export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm # 3、执行 nvm -v 用于查看nvm的版本号,如果出现 command not found ,说明环境没有完全加载,需要你关闭当前客户端重新登陆一下,或者执行下面代码再次加载一个配置文件 source ~/.bashrc # 然后再 执行 nvm -v 即可查看到nvm的版本号,说明nvm安装成功
# 使用 nvm 安装 node 并切换版本 # 安装指定版本 nvm install 12 # Now using node v12.22.6 (npm v6.14.5) node -v # v12.22.6 # 切换指定版本 如果之前没有安装过相关版本 则会提示还示安装相关版本 nvm use 16 # Now using node v16.9.1 (npm v7.21.1) node -v # v16.9.1
# 在centos 7安装node.js 18以及更高的版本时, 可能会出现 以下错误
# 解决该问题中,参考了以下文章 # https://www.cnblogs.com/riverhan/articles/18298541 # https://www.cnblogs.com/yuwen01/p/18067005
nvm install 18.18.2 # Now using node v18.18.2 # 当想查看node版本时报错 node -v #node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node) #node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node) #node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node) #node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node) #node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node) #node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node) # 查看系统内安装的glibc版本 再根据错误信息分析可得知 新版的node v18开始 都需要GLIBC_2.27支持,可是目前系统内却没有那么高的版本strings /lib64/libc.so.6 | grep GLIBC_ # GLIBC_2.2.5 # ... # GLIBC_2.17 # 解决办法就是更新GLIBC ,根据提示安装所需的高版本 glibc-2.28 # 相关库源链接 http://ftp.gnu.org/gnu/glibc # 找一个用于保存解压库文件的目录,我用的是 /usr/local/src cd /usr/local/src wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz tar xf glibc-2.28.tar.gz cd glibc-2.28/ && mkdir build && cd build ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin # 在上面配置的时候,可能会出现以下错误,如没有错误请忽略下面的操作 # 错误信息,提示我make编译器太旧,看来得更新一下make编译器 configure: error: *** These critical programs are missing or too old: make compiler *** Check the INSTALL file for required versions. # 解决方法:升级gcc和make编译器 # 升级GCC(默认为4 升级为8)</span> yum install -y centos-release-scl yum install -y devtoolset-8-gcc* # 在执行上面命令的时候可能会提示 # Loaded plugins: fastestmirror, langpacks # Repository epel is listed more than once in the configuration # Loading mirror speeds from cached hostfile # Could not retrieve mirrorlist http://mirrorlist.centos.org?arch=x86_64&release=7&repo=sclo-sclo error was # 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Name or service not known" # ... # Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 # 报错解释:这个错误表明系统无法为名为 "centos-sclo-rh" 的软件集合仓库找到有效的基础URL。这通常发生在CentOS系统上,当系统尝试使用已经停止支持的软件仓库时。 # 问题原因:Centos 7版本已经于2024/6/30结束了官方支持。 # 解决方案参考 https://www.cnblogs.com/riverhan/articles/18298541 # 备份当前源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak mv /etc/yum.repos.d/CentOS-SCLo-scl.repo /etc/yum.repos.d/CentOS-SCLo-scl.repo.bak mv /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo.bak # 下载新的CentOs-Base.repo到 /etc/yum.repos.d/ # CentOS 7 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 或者 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 写入新 配置文件 并保存 vim /etc/yum.repos.d/CentOS-SCLo-rh.repo [centos-sclo-rh] name=CentOS-7 - SCLo rh baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo # 禁用 yum的 centos-sclo-rh 和 centos-sclo-sclo 选项 yum-config-manager --enable centos-sclo-rh yum-config-manager --enable centos-sclo-sclo # 清空yum缓存 并重新生成 yum clean all yum makecache # 该部分问题解决后,可以再执行一次 # yum install -y centos-release-scl # yum install -y devtoolset-8-gcc* # 备份旧的gcc和g++ 并将安装最新的gcc和g++替换到原来的位置 mv /usr/bin/gcc /usr/bin/gcc-4.8.5 ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc mv /usr/bin/g++ /usr/bin/g++-4.8.5 ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++ # 升级 make(默认为3 升级为4) cd /usr/local/src wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz tar -xzvf make-4.3.tar.gz && cd make-4.3/ ./configure --prefix=/usr/local/make make && make install # 备份旧的make编译器,并将新版本替换到原来的位置 cd /usr/bin/ && mv make make.bak ln -sv /usr/local/make/bin/make /usr/bin/make # 这时 所有的问题 都已经解决完毕 再重新执行上一步 更新glibc即可 # 先回到 一开始解压并构建的 glibc-2.28/build 目录,然后执行 ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin # 再执行 make && make instsall 该步骤执行时间会有点久,大概20-30分钟左右 make && make install # 验证一下 node -v # 仍然有错误 # node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node) # node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node) # node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node) # 说明要连接一下新的动态库 strings /usr/lib64/libstdc++.so.6 | grep CXXABI # CXXABI_1.3 # CXXABI_1.3.1 # CXXABI_1.3.2 # CXXABI_1.3.3 # CXXABI_1.3.4 # CXXABI_1.3.5 # CXXABI_1.3.6 # CXXABI_1.3.7 # CXXABI_TM_1 # 更新libstdc++.so.6.0.26 cd /usr/local/src wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26 # 将下载的动态库复制到 /usr/lib64目录 cp libstdc++.so.6.0.26 /usr/lib64/ # 将复制的新动态库文件用软链进行替换 ln -snf /usr/lib64/libstdc++.so.6.0.26 /usr/lib64/libstdc++.so.6 # 最后再检测一下 node -v #显示 v18.18.2 # 到此 node 升级成功 # 希望该教程能帮到你
Talk is cheap, show me the code.