원래 node 버전 관리자로 nvm을 쓰고 있었는데(프로젝트별로 버전 관리할 필요는 없지만 그냥 node 설치가 편해져서 쓴다ㅎㅎ) fnm가 새로 나왔다길래 써봤고 꽤 만족스러워서 세팅법을 정리해 본다. (관리자 권한이 필요 없다!)
참고로 리눅스 환경에선 이전에도 소개한 anyenv를 쓰고 있다.
리포지토리 주소는 다음과 같다.
설치
릴리즈 페이지에 가서 바이너리를 다운받아 PATH 경로에 둬도 되고 편리하게 winget으로 설치해도 된다.
winget install Schniz.fnm
설치하고 나면 이렇게 fnm 명령어를 사용할 수 있게 된다.
그리고 셸 설정을 해야 한다. 윈도우니까 파워셸 기준으로 설명하고 다른 환경은 리포지토리를 참고하자.
notepad $profile
위 명령어로 프로필 파일을 연다. 만약 프로필 파일이 없어서 오류가 난다면 "New-Item -Path $PROFILE -Type File -Force" 이 명령어로 먼저 해당 파일을 생성하고 입력하면 된다.
fnm env --use-on-cd --version-file-strategy=recursive --resolve-engines | Out-String | Invoke-Expression
프로필 파일 끝에 위 줄을 추가하고 저장하면 된다.
사용법
node -v > .node-version
이렇게 .node-version 파일에 버전을 적어놓으면 해당 디렉터리에 진입할 때 노드 버전이 바뀐다.
fnm list-remote
위 명령어를 입력해서 설치할 수 있는 node 버전을 볼 수 있고 아래 명령어로 해당 버전을 설치할 수 있다.
fnm install [버전]
버전에 lts라고 적으면 알아서 최신 LTS 버전으로 설치한다.
fnm use [버전]
이 명령어로 node 버전을 전환할 수 있다. 임시로 바뀌는 것이며 영구적으로 바꾸려면 아래에 소개한 fnm default 명령어나 위에서 얘기한 .node-version 파일을 사용해야 한다.
문제해결
그런데 파워셸, vscode 내 터미널에선 정상적으로 node가 인식되고 전환되지만, 일부 환경(내부적으로 node를 호출하는 vs code 확장)에서는 인식하지 못하고 node가 설치되지 않은 것으로 인식하는 문제가 있었다. 방법을 찾다가 우연히 “%APPDATA%\fnm\aliases”를 들어가 보고 답을 찾았다.
fnm default <버전>
fnm default 명령어로 기본 node 버전을 지정할 수 있다. 그리고 앞에서 말한 경로를 들어가 보면 default라는 이름의 심볼릭 링크가 있는 걸 알 수 있는데 이 링크는 기본 node와 연결되어 있다. 즉, 저 심볼릭 링크를 path에 추가한다면 시스템에서는 기본으로 지정한 node를 사용할 수 있다는 것이다. (노드 버전을 바꿔도 저 경로는 바뀌지 않으니, 추가로 작업할 필요가 없다)
시작 메뉴를 열고 “환경 변수”라고 검색창에 입력하면 “계정의 환경 변수 편집” 항목이 뜬다. 이걸 열고 사용자 변수에서 Path를 찾아 편집을 누른다.
여기에 “%APPDATA%\fnm\aliases\default” 경로를 추가해 준다.
이제 문제가 발생하지 않는다. 짠!
참고로 저 경로에 있는 심볼릭 링크들은 아래 명령어를 통해서 임의로도 만들 수 있다.
fnm alias <버전> <이름>
'프로그래밍 > 웹' 카테고리의 다른 글
[자작] 네이버 카페 패스 (다음 카페 지원) (4) | 2024.02.17 |
---|---|
[JavaScript] DOMContentLoaded 이벤트가 작동하지 않을 때 (0) | 2023.06.18 |
[JavaScript] query string를 object로 변환하기 (0) | 2023.04.23 |
[JavaScript] Debounce, Throttle 함수 (0) | 2023.03.18 |
[JavaScript] window.open()으로 연 창에서 onload 이벤트가 실행되지 않을 때 (2) | 2022.11.16 |
Tailwind CSS 클래스 모음집 사이트 (0) | 2022.07.31 |
[CSS] 간단한 중앙 정렬 (0) | 2022.07.09 |
[Node.js] 로컬 패키지 사용하기(+alias) (0) | 2022.06.13 |