解決 nvm is not compatible with the npm config “prefix” option: currently set to “/usr/local” 問題

最近發現我開啟 VS Code 的 Terminal 都會出現 nvm is not compatible with the npm config “prefix” option: currently set to “/usr/local” 而且沒辦法用提示的方法解決,今天就要來解決這個問題。

Ryan Hsu
5 min readNov 11, 2018
“white and black One Way-printed road signages” by Brendan Church on Unsplash

我的環境

  • 我的 MacOS 版本:10.14
  • 使用 iTerm2 與 oh-my-zsh 作為 Terminal 預設
  • HomeBrew 安裝 nvm, yarn
  • nvm 安裝 npm 版本

情況

我的 MacOS 透過 HomeBrew 安裝 nvm,並透過 nvm 安裝 npm,但我開啟 Terminal 會顯示以下資訊,而且無法使用他建議的方法修正。

nvm is not compatible with the npm config “prefix” option: currently set to “/usr/local”

發生原因

查了一下發現應該是 HomeBrew 安裝 nvm 導致的問題,所以各大網站都不推薦使用 HomeBrew 安裝 nvm,至於為什麼…可以看這個 GitHub issue,其中說到

nvm is utterly unsupported on homebrew - please brew uninstall that, and install using the proper curl command in the readme, and see if you're still having issues?

恩…好喔,所以 nvm 其實不支援 HomeBrew 安裝的版本。

解決方法

大致上就是 GitHub issue 講的那樣,先解除用 HomeBrew 安裝的 nvm,再使用 curl 安裝 nvm。

但我心裡想的是,要解除就要完全解除安裝,包含 nvm、npm 與 yarn 的 CLI,為什麼呢?因為 npm 是用 nvm 安裝的,而 yarn 對於 npm 有相依(當然也有不相依的做法,這邊就先不談這個)

步驟一,解除 npm 已安裝版本

用 nvm 指令列出所有安裝版本

$ nvm ls
$ nvm uninstall <version>

步驟二,砍掉 CLI

先到 Terminal 根目錄(~)下找資料夾

  • .nvm
  • .npm
  • .yarn

直接全砍掉,這些是 CLI 會用到的資料夾,並重新開啟 Terminal(這一步驟很重要),檢查是否還有這三個 CLI,如果 Terminal 告訴你

zsh: command not found: nvm

你就成功了

步驟三,砍掉安裝 instance

使用 HomeBrew 指令移除安裝

$ brew list
$ brew uninstall yarn
$ brew uninstall nvm

並且重新開啟 Terminal

步驟四,重新使用 curl 安裝 nvm

使用 curl 重新安裝 nvm

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

安裝完成,就可以使用 nvm 安裝 npm 版本了,這邊我是使用 LTS 版本為範例

$ nvm install --lts
$ nvm use --lts

然後再重新開啟 Terminal

步驟五,重新安裝 yarn

我們剛剛把 yarn 解除安裝,這時我們再把 yarn 安裝回來,一樣使用 HomeBrew 就可以了

$ brew install yarn

如果這時候你的 HomeBrew 安裝遇到問題,那麼你可能是遇到了 MacOS 升 10.14 版本的問題,可以參考 Blackie Tsai 的文章來解決 — macOS occurred problem when installation — missing xcrun issue

安裝完 yarn,一樣再重新開啟 Terminal,檢查一下是不是所有 CLI 都已經回來了?如果是,你就成功了。

步驟六,驗證問題是否還會發生

重新使用 VS Code 開啟 project,看 Terminal 是不是還會有 warning?如果沒有,就是成功了!

Hi 我是 Ryan,如果這篇文章有幫助到你,請你不吝嗇的給予我鼓掌,那將是我進步的動力!👏

另外,你知道 Medium 一篇文章拍手其實可以拍 50 下嗎?如果你願意,請賜我掌聲,謝謝!

--

--