vscode와 iterm에서 node의 버전, 설치된 경로, 전역으로 설칠된 패키지 정보가 다르다는 것을 확인했다.
알고보니 vscode, terminal의 환경변수의 순서들이 각각 다르기 때문에 발생했다. 순서가 다르거나 PATH정보가 누락되거나 하는 등으로 완벽하게 일치하지 않으면 똑같이 동작하는것을 보장할 수 없다고 한다.
iterm(Terminal)에서 PATH와 node설치 경로를 확인했을 때 아래와 같았다.
$ echo $PATH | tr : '\n'
/opt/homebrew/bin
/opt/homebrew/sbin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Library/Apple/usr/bin
$ which node
/opt/homebrew/bin/node
그리고 vscode 터미널(zsh)에서 PATH와 node설치 경로를 확인했을 때 아래와 같았다.
$ echo $PATH | tr : '\n'
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Library/Apple/usr/bin
/opt/homebrew/bin
/opt/homebrew/sbin
$ which node
/usr/local/bin/node
각 터미널에서 PATH의 차이가 보인다.
/opt/homebrew/bin
/opt/homebrew/sbin
두 PATH가 vscode 터미널상에서는 아래로 위치가 잡혀있는것이 보인다.
그리고 노드의 경로도 다른게 보인다.
나는 homebrew로 node를 설치했기 때문에 노드가 /opt/homebrew/bin
경로에 설치되어있고 이 경로의 노드를 우선적으로 사용해야 한다. 이 말인즉슨 vscode의 터미널이 iterm(Terminal)의 PATH 설정과 제대로 통합되지 않은것이다.
참고로 맥 기준 해결 방법이다.
vscode의 터미널 통합 설정이 필요하다.
아래 2개의 사이트를 참고해서 임시적(?)으로 해결했다. 근본적으로 왜 이런 현상이 발생했는지 확실하게 가닥은 못잡았지만 우선 이 정도로 조치를 취해도 문제는 없을것 같다.
vscode의 유저 환결설정(JSON)에서 아래 설정을 추가 해주었다.
"terminal.integrated.env.osx": {
"PATH": ""
},
자세한 설명은 아래 사이트를 참고해보면 좋을것 같다.
Point
Find some dark magic for workaround. In case someone with the same problem need a solution. As long as you ADD some stuff to configuration,terminal.integrated.env.osx
, the content will be appended to PATH after shell initialization(source bash_profile or zshrc). In my Mojave, I simply add following empty entry to my user configuration:"terminal.integrated.env.osx": { "PATH": "" }
Then the $PATH will be the same as the external terminal.
Too busy to dive into the source code to check the root cause, maybe do it later when I have more time.