터미널에 다음 명령어를 입력한다. (Homebrew 사용 시)
brew install fnm
또는 설치 스크립트 사용:
curl -fsSL https://fnm.vercel.app/install | bash
winget install Schniz.fnm
eval "$(fnm env --use-on-cd)"
fnm env --use-on-cd | Out-String | Invoke-Expression
프로젝트 루트에 .node-version이나 .nvmrc 파일을 만든다. 그리고 해당 파일 안에 원하는 버전을 입력하면 된다.
만약 버전이 없으면 설치 안내가 나온다. y를 눌러서 설치하면 사용 가능하다.
nvm과는 별도로 동작하므로 .zshrc에 nvm 설정은 주석처리한다.
특정 디렉토리에 진입했을 떄 .nvmrc가 있으면 그거로 바꿔주기만 한다. 예를들면 nvm에서 기본으로 18.18.0을 사용한다고 했을 때, a라는 프로젝트 루트에 .nvmrc가 있고 그게 25.1.0 버전으로 되어 있다고 가정하자. 처음에는 어떤 경로에서든 18.18.0이 선택되어 있다. a라는 디렉토리에 들어가면 그때 25.1.0버전으로 변경된다. 그리고 다시 다른 곳에 진입해도 25.1.0이 유지된다. 18.18.0으로 돌아가지 않는다.
home(~)에 .node-version을 생성하여 기본 버전을 명시하면 된다.
이렇거 버전을 명시하고 a라는 버전에서 cd ..해서 상위로 올라가면 더 상위(~)에 버전을 참고하게 된다.
근데 이게 안되는 상황이 발생할 수 있다.
~까지 가면 버전이 바뀌는데 중간에는 안바뀌는 경우
예를들어 ~/proj/a 였다면 a에서는 25.1.0 인데 cd .. 하면(~/proj) 안바뀌는 경우가 있다.
이때 해결방법은
우선 fnm env를 입력해본다.
export FNM_VERSION_FILE_STRATEGY="local"
인지 확인한다.
만약 local이라면 이걸 recursive로 바꿔줘야 더 최상위의 .node-version파일을 참고할 수 있게 된다.
방법은 .zshrc를 다음과 같이 변경한다.
eval "$(fnm env --use-on-cd --version-file-strategy=recursive)"
끝.