Windows上安装NVM之后找不到NPM的解决办法
不久前自己工作的电脑上Node.js升级了,导致有一个依赖的项目无法正常启动,于是到Google上搜了一把,找到stackoverflow上的一个解决办法。基本意思是说当前的Node.js版本和gulp 3不兼容,要么将gulp升级到4,要么将Node.js降回到原来的版本。于是忽然想到之前在Ubuntu上安装过NVM,Windows上应该也有对应的版本,于是在github上搜了一下,果然有专门针对Windows的版本。
下载安装后,可以直接通过NVM命令在同一台电脑上安装多个不同版本的Node.js,而且可以随意切换版本。
但是通过nvm use命令使用指定的Node.js版本之后,发现无法使用npm命令。
按照错误描述,应该是在对应的目录中没有找到npm-cli.js这个文件。于是去NVM的安装路径下(通常为c:\users<your user>\AppData\Roaming\nvm)查看了一下。
NVM将所有安装的Node.js的不同版本存放在这个目录下,当使用nvm use命令时,会将对应版本的Node.js目录中的内容拷贝到C:\Program Files\nodejs目录中,从而达到切换不同Node.js版本的目的。但是这个目录下的node_modules目录是空的!怎么回事?
通过搜索,我找到在github上的nvm-windows的issues中也有人在问同样的问题。基本意思就是说npm的仓库已经从https://github.com/npm/npm移到https://github.com/npm/cli了,但是NVM v1.1.7并没有做相应的调整,所以通过nvm install安装Node.js时对应的npm实际上并没有安装成功,不过NVM此时并没有报告任何错误,而是仍然显示已安装成功。
既然这是NVM自身的问题,那我们只能通过手动的方法来修复。从Node.js官网下载对应版本的压缩包,将其中node_modules目录下的内容拷贝到NVM目录下对应Node.js安装目录中的node_modules中。如果NVM目录下有多个Node.js版本,则需要手动拷贝每个Node.js版本中node_modules目录的内容。
如https://nodejs.org/download/release/v11.15.0/是Node.js v11.15.0版本的下载地址。下载之后打开压缩包,将其中的node_modules/npm目录解压并拷贝到NVM目录下对应Node.js下的node_modules目录中。
再次使用nvm use命令切换不同版本的Node.js,然后在命令行通过node -v查看当前Node.js版本,同时输入npm看看该命令是否有效。