共计 1808 个字符,预计需要花费 5 分钟才能阅读完成。
之前安装了 vue 2.9.6 的版本,现在 vue 官方升级到了 3.x 版本,所以想卸载掉 2.9.6 的版本,安装 3.x 版本,结果输入官方给出的命令 npm uninstall vue-cli -g
却无法成功卸载,一直提示 up to time in 0.03s
,然后百度和 Google 了好久,也没见到有效的解决方法,最终沉下心慢慢的研究,终于知道了原因,记录下来,方便遇到相同问题的人。
先介绍原因吧,可能大家都知道,npm 是 node 包管理器的简称(node package manager),在我们安装 node 的时候会一并安装。正常情况下,我们安装的 node 在 /usr/local/bin
目录下,而 npm 在 /usr/local/lib/node_modules
目录下,然后我们通过 npm 的全局命令安装的模块也在 /usr/local/bin
目录下(例如 npm install vue-cli -g
),平时我们在终端里使用的 node --vesion
或者 vue --version
这种命令其实调用的就是 /usr/local/bin
中的命令。而我们使用 npm uninstall vue-cli -g
命令卸载 vue-cli 模块的时候,也是在这个目录去找,去卸载。
但是如果我们在已经安装 vue 的情况下再安装 nvm(node 版本管理器,node version manager),就会出问题,nvm 会改变 npm 全局安装模块的路径,我这边的路径变成了 ~/.nvm/versions/node/v10.15.1/bin
,在安装 nvm 之后我再使用 npm 的全局安装命令安装的模块全都在这个目录下。那么我们使用 npm uninstall vue-cli -g
命令去卸载 vue 当然是不会成功的,因为它是在 ~/.nvm/versions/node/v10.15.1/bin
目录去卸载,而我们的 vue 安装在 /usr/local/bin
目录下。
那么知道了原因之后,就得解决问题了,下面的方法可能不是最好的,大家可以探索更好的方法。
- 删除
/usr/local/lib/node_modules
目录(谨慎选择,因为这个目录下可能还有其他地方用到的模块):sudo rm -rf /usr/local/lib/node_modules - 删除
/usr/local/bin
下的 node:sudo rm /usr/local/bin/node - 删除
/usr/local/bin
下的 vue:sudo rm /usr/local/bin/vue - 删除
~/.nvm
目录:sudo rm ~/.nvm - 打开
~/.bash_profile
文件:vi ~/.bash_profile -
删除 .bash_profile 文件中跟 nvm 有关的部分:
export NVM_DIR="$HOME/.nvm" [-s "$NVM_DIR/nvm.sh"] && \. "$NVM_DIR/nvm.sh" # This loads nvm [[-r $NVM_DIR/bash_completion]] && \. $NVM_DIR/bash_completion
- 使修改后的 .bash_profile 生效:source ~/.bash_profile
- 这时候在当前终端窗口里面应该仍然可以使用 nvm 命令,然后你关掉当前终端,重新打开终端输入 nvm 命令,应该已经会提示 command not found
- 重新安装 nvm(https://github.com/creationix…):
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
- 重新安装 node:
nvm install --lts
- 重新安装 vue:
npm install -g @vue/cli
这时候使用 vue --version
看到的应该是 3.x 的版本了。而这些命令所在的目录现在都是 ~/.nvm/versions/node/v10.15.1/bin
。提示一下,要想看一个命令所在的目录,可以使用 which 命令,比如说 which vue
、which node
,就会显示命令所在的目录。
最后,通过公众号“极课助手”去购买“极客时间”所有课程,可以获得高额返现,最高可返 51 元,如果想了解更多技术知识,可以关注“极课助手”公众号。
参考文献:
- https://my.oschina.net/oslph/…
- https://github.com/creationix…