在日常的前端或 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
查看一下门路,不同机器和不通装置形式,地位可能不一样。
- 删除全局 node_modules 目录,外面其实只有几个文件夹,是 npm 和应用 npm 全局装置的比方 yarn、cnpm 等
sudo rm -rf /usr/local/lib/node_modules
- 删除 node,其实就是卸载 node 环境了
sudo rm /usr/local/bin/node
- 删除全局 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 版本的我的项目,都放在这个文件夹下,就很敌对了。