[VSCODE] nvm is not compatible with the npm config 'prefix' option: currently set to '/usr/local'

상황

yarn 을 사용해야해서 yarn 을 다시 설치했는데 그 이후부터 vscode의 터미널에서 다음과 같은 기분 나쁜 문구가 계속 출력된다.

1
2
nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
Run `npm config delete prefix` or `nvm use --delete-prefix v12.8.1 --silent` to unset it.

그리고 npm 관련 작업이 이전같지 않고 썩 맛이 간 것 같은 느낌이 든다.

원인

node를 설치하는데에 여러가지 방법들이 존재하는데, 그걸 잘 몰랐던 상태에서 이런 저런 방법으로 설치한 적이 있었다. 이 때, node의 버전이나 global 설치에 대한 버전 관리가 전혀 되지 않았었는데, 문제의 원인은 node 에 대한 관리의 방법이 여러가지였기 때문이었다.

  1. brew를 통한 설치
  2. nvm을 통한 설치
  3. 홈페이지에서 직접 다운로드하여 설치

잘 모르는 상태에서 짬뽕해서 설치하다보니 버전관리가 어려웠기에 nvm으로 관리하기로 하고 모두 초기화 했다.

이번 문제는 yarn을 설치하면서 생긴 문제인데, 공식 홈페이지에서 안내한 방법은 다음과 같다.

brew install yarn

이 과정에서 brew에서 관리하는 node가 없다보니 새로 설치하게 되고 이 과정에서 다시 새롭게 문제가 발생하게 된 것 같다. 물론 확실한 체크는 하지 못했음.

해결

brew 에서 참조되지 않는 node를 삭제하자.

brew uninstall --ignore-dependencies node

yarn install 과정에서 발생한 ignore-dependencies about node 를 삭제하는 방법을 사용했다.

그런데 이렇게 해도 문제는 계속 발생한다.

일반 터미널에서는 정상이다.

nvm current –> v12.8.1
which npm –> $HOME/.nvm/versions/node/v12.8.1/bin/npm

하지만 vscode의 built-in 터미널에서는 다음과 같다.

nvm current –> none
which npm –> /usr/local/bin/npm *

vscode에서 사용하는 Shell 의 타입도 확인했다.

내가 사용하고 있는 Shell 타입은 Z shell, zsh 이다.

같은 Shell 임에도 불구하고 일반 터미널과 built-in 터미널의 차이가 생기는 이유는 무엇일까?

가만히 확인해보니 built-in 터미널에서의 which npm 의 결과가 이상하다.
이미 brew uninstall --ignore-dependencies node 로 관련 데이터를 삭제했음에도 계속해서 참조하고 있다.

cd /usr/local/bin/npm –> cd: no such file or directory: /usr/local/bin/npm

해결 방법은 MS에서 작성한 vscode 관련 문서에서 제공하고 있었다

이러한 문제는 대부분 macOS 문제이며, 외부의 터미널에서는 발생하지 않는다.
이 문제에 대한 일반적인 원인은 다음과 같다.

  • /usr/local/bin/npm 과 같이 사용자 환경 변수의 어딘가에 있는 node 인스턴스를 통해서 npm이 과거에 전역 설치가 되었다.
  • $PATH에서 개발도구를 얻기 위해 vscode는 구동 시 bash 로그인 shell을 시작할 것이다. 이것은 이미 ~/.bash_profile 이 실행되고 built-in 터미널이 시작될 때 또 다른 로그인 shell 을 실행하여 $PATH를 예상하지 못한 방식으로 재정렬함을 의미한다.

이 문제를 해결하기 위해 npm이 설치된 위치를 추적하여 관련된 모듈 모두를 제거해야한다.

1
2
rm -R /usr/local/bin/npm /usr/local/lib/node_modules/npm/bin/npm-cli.js
rm -R /usr/local/bin/npx /usr/local/lib/node_modules/npm/bin/npx-cli.js

참조

https://github.com/nvm-sh/nvm/issues/1690#issuecomment-429378143
vscode-docs/integrated-terminal.md at master · microsoft/vscode-docs · GitHub

공유하기