乐趣区

关于node.js:nvm一个node版本管理工具-打开终端自动切换node版本教程

在日常的前端或 node 后盾开发中,应用的局部 node 依赖,可能不反对以后应用的 node 版本,这时候如果还想应用这个依赖欢快的开发,那只能切换 node 版本了。

然而,卸载和装置 node 的麻烦水平尽管还能承受,但想在其余我的项目,仍然应用高版本 node 的语法反对,要么应用 webpack 或 gulp 这种构建编译工具,要么就还是须要应用高版本 node。

这时候,nvm 呈现了。

nvm 就是 node 版本管理器,应用它能够装置多个版本的 node,而后能够通过一行命令,轻松切换以后应用的 node 版本。

也就是说,不必再卸载、装置了,想用哪个版本,就用 nvm 装置,安完一个指令切换就能够了!

上面基于 mac 零碎,进行一些步骤的解说。

装置

nvm 官网教程

卸载全局装置的 node 包

既然应用 nvm‘托管’,那么本人之前装置的全局 node 包,就须要先卸载了,避免出问题。

npm、cnpm、yarn 等都会被一并删掉,稍后须要从新安。

上面的指令,能够查看曾经装置在全局的模块 node 功能模块,以便删除这些全局模块后再依照不同的 node 版本从新进行全局装置
npm ls -g --depth=0

上面,是卸载步骤

也能够用 type -a node 查看一下门路,不同机器和不通装置形式,地位可能不一样。

  1. 删除全局 node_modules 目录,外面其实只有几个文件夹,是 npm 和应用 npm 全局装置的比方 yarn、cnpm 等
    sudo rm -rf /usr/local/lib/node_modules
  2. 删除 node,其实就是卸载 node 环境了
    sudo rm /usr/local/bin/node
  3. 删除全局 node 模块注册的软链,懂 linux 指令语法的,大略能够看懂,上面这行的命令,就是先进入到零碎的全局指令文件,筛选出其中依赖于 node_modules 的所有指令(其实还是步骤 1 中的那几个指令),而后删除
    cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

能够应用终端输node -v,如果提醒node: command not found,就阐明卸载实现了

装置 nvm

装置 nvm 有多种形式,上面是两种形式,倡议在官网查看最新的装置语句(因为外网问题,很可能会装置失败,前面有其余装置形式):

curl 形式:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

wget 形式:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

下面两个语句,都会都会执行 nvm 的装置脚本,装置实现后,会有相似上面的打印:

=> Profile not found. Tried  (as defined in $PROFILE), ~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile.
=> Create one of them and run this script again
=> Create it (touch) and run this script again
   OR
=> Append the following lines to the correct file yourself:

export NVM_DIR="$HOME/.nvm"
[-s "$NVM_DIR/nvm.sh"] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
=> 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

意思是,咱们须要在 ~/.bashrc~/.bash_profile~/.zshrc~/.profile 这四个文件的任意一个,退出 nvm 的这行指令,保留敞开,而后重启终端,就能够应用 nvm 指令了。

v0.35.3版本的指令如下,能够间接在官网装置最新版本的 nvm,粘贴最新版的指令(上面是官网提供的指令,也能够应用装置实现后,下面打印进去的指令):

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

这里举荐创立~/.bash_profile,如果有,则间接在外面的最初面加上下面的代码即,而后执行source ~/.bash_profile,重载此文件,nvm 就能够失常应用了。

装置失败

下面的语句有可能会因为网络问题,而装置失败。

此时能够进入 nvm 官网教程(理论就是一个 github 页面),这里会提供多种装置形式(但最终貌似都须要克隆 nvm 的仓库,咱们能够手动克隆仓库了)。

然而,github 同样有无奈关上的可能,那咱们也关上国产「githup」- 码云搜寻 nvm-sh,找到热血网友从 github 克隆至此的我的项目,一样的应用。

上面大抵解说其中比较简单的一种:

Git Install:

进入到 ~ 目录,应用 git 克隆 nvm 仓库:

cd ~/

git clone https://github.com/nvm-sh/nvm.git .nvm

进入,切换到最新版本分支(理论最新分支,可再去官网看一下):

cd .nvm

git checkout v0.38.0

执行一下装置指令,这个指令霎时执行实现:

. ./nvm.sh

最初,再一下几个文件中的任意一个,~/.bashrc~/.profile,或 ~/.zshrc,粘贴入一下代码:

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

最初的最初,让零碎从新读取一下这个文件,比方这个放进了 ~/.bashrc 文件中,那么执行:

source ~/.bashrc

实现,此时能够应用 nvm 了。

nvm 应用

次要为如下一些指令:

性能 指令
列出以后已装置的 node,和可装置的 lts(长期反对稳定版)版本 nvm ls
列出所有近程服务器的版本 nvm ls-remote
装置指定版本,可含糊装置,倡议先查问后装置,比方 nvm install v11.11.0 nvm install < 版本号 >
装置最新稳定版 node nvm install stable
删除已装置的指定版本,语法与 install 相似 nvm uninstall < 版本号 >
设置一个默认版本,新关上的终端应用的版本 nvm alias default < 版本号 >
给不同的版本号增加别名 nvm alias < 别名 > < 版本号 >
勾销一个别名 nvm unalias < 别名 >
切换以后终端应用的版本,但只针对以后终端失效,不影响其余 nvm use < 版本号 或 别名 >
显示以后的版本 nvm current
删除已定义的别名 nvm unalias < 别名 >
在以后版本 node 环境下,从新全局装置指定版本号的 npm 包 nvm reinstall-packages < 版本号 >

应用终端进入不同目录,avn 主动切换 node 版本

这个性能原本不须要,但近几年发现,业务和我的项目太多时,可能真的就很须要了。

比方,接管过去我的项目,应用的 node 版本可能形形色色;本人公司开发的我的项目,应用固定某个 node 版本;偶然本人钻研些新技术,又可能会应用最新版的。

原本是进入某个我的项目,就应用 nvm use 来切换一下,但总的来说很麻烦,每次关上终端都要来这么一下。

网上找了找,找到了这个工具:avn

首先新关上一个终端,保障当初应用的是默认版本的 node,这是因为 nvm 中,在不同的 node 版本下装置的全局依赖,是互不相通的。

这个工具是基于 node 的,咱们只须要默认 node 下全局装置,当每次应用终端进入不同目录时,node 默认都是版本,而后它会主动执行,切换到接下来你要指定的 node 版本。

关上终端后,先全局装置:

npm install -g avn avn-nvm avn-n

而后启动这个工具:

avn setup

留神:不晓得为什么,我应用 node^11.11.0 装置的依赖们,就能够启动,而是用 node^12.21.0,它还是个长期反对版,应用这个版本装置的依赖,启动时却会报错 if (cb) cb.apply(this, arguments) 很奇怪,不过,你能够在 v11.11.0 下,装置依赖并启动,之后切换 node 版本也不会影响了,如果有影响,就在其余版本下也装置依赖。

接下来,就是去到你须要自定义 node 版本的我的项目,创立文件 .node-version,内容间接写你须要的 node 版本,比方:

这个 node 版本,须要是你曾经用 nvm 装置过了的,否则会报错 avn could not activate node v14.15.0

v14.16.0

而后,在这个我的项目下重启终端,就会呈现提醒:

avn activated v14.16.0 via ../.node-version (avn-nvm v14.16.0)

此时这个终端应用的 node,就是 v14.16.0 了。

优化: 但下面这个办法,须要在每个自定义 node 版本的我的项目中,增加这个文件,很不敌对。

其实,咱们能够在把这个文件,放在这个我的项目的父级目录中,同样会失效,这样但凡应用同一个 node 版本的我的项目,都放在这个文件夹下,就很敌对了。

退出移动版