Mac 升級 vue 3.x 之前卸載 vue 2.9.6 失敗的原因和解決方法

之前安裝了 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
1
2
3
使修改後的 .bash_profile 生效:source ~/.bash_profile
這時候在當前終端窗口裏面應該仍然可以使用 nvm 命令,然後你關掉當前終端,重新打開終端輸入 nvm 命令,應該已經會提示 command not found
重新安裝 nvm(https://github.com/creationix/nvm#install-script ):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,就會顯示命令所在的目錄。

參考文獻:

https://my.oschina.net/oslph/blog/1926969
https://github.com/creationix/nvm#removal

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章