这个问题是在安装完yarn之后出现,相信很多在用yarn的同学的再回去使用npm的时候会出现这个问题。度娘上面我没有找到相关的解决方法所以只能去Stack Overflow上寻找答案,找到的结果是这样的
sudo rm -rf /usr/local/lib/node_modules
sudo rm -rf ~/.npm
brew uninstall --force node
brew install node
上面命令的意思删除所有全局包和.npm文件夹,重新安装node。
这种方法我没试过,因为肯定有很多小伙伴安装了除npm之外的全局包比如express、webpack等等,如果不考虑清楚直接全删了的话。。。后果惨不忍睹。。。(ps:因为本人英语实在不好,所以经常直接傻瓜式粘命令,提醒小伙伴们最好粘命令之前去查查是什么意思,否则出了问题有可能都没法回退。。。)
说了这么多,下面切入正题
首先需要知道为啥有报这个错,可以到全局的npm包看一下,路径是
/usr/local/lib/node_modules/npm
进入npm的node_modules中的semver文件夹可以看到里面变成空的了!具体的原因不好意思我没有深究,但是我觉得一定和yarn是有关系的。不仅如此,你会看到其他的文件夹也基本都是变成空的了,这下咱们就知道为啥报semver这个module找不到了吧!
网上还有解决方法是说用 npm unintall npm -g 删除npm包,实测不好使。。。npm所有的命令都不行了 uninstall肯定也不行了啊!!!
我的解决方法:
1.先删除全局的npm包:也就是把刚才提到的/usr/local/lib/node_modules/npm,这个npm文件夹删除掉
2.回到/usr/local/lib/node_modules这个目录,从GitHub上重新clone下git包
终端:
git clone --recursive git://github.com/isaacs/npm.git
这样新的npm包就回到了全局node_modules中
3.打开终端输入
npm -v
看一下npm是否可以打印出版本号,如果可以,npm就可以正常使用啦!
其实只要知道原因所在,解决方法还是很简单的有没有~~~
对了,还有一点建议,我之前是觉得有yarn就可以用不到npm了,但是事实可能并不是这样的,比如使用一些框架的脚手架init项目默认都是用的npm,怎么改成yarn可能很多小伙伴(包括我)不会,就无法执行下去了。因此还是这个问题还是很有必要及时进行解决的。
本人只是小白。。。可能说的有不到位的地方,欢迎小伙伴们指出。大家共同进步。