해당 포스트는 npm,pnpm 같은 node package manger에 대한 글이 아닙니다. node version을 관리하는 것에 관한 글입니다.
하나의 프로젝트에서만 작업하는 경우는 드뭅니다. 저같은 경우에는 콘텐츠에디터, 디자인시스템, 웹뷰 프로젝트를 작업하고있습니다. 여러 프로젝트를 관리하다 보면 Node Version 관리의 어려움을 겪을 수 있습니다. 왜냐하면 각각 다른 Node Version을 강제하고 있기 때문입니다. 프로젝트에서 지정한 버전을 사용하지 않으면 다음과 같은 오류를 보여줍니다.
음...🧐 그렇다면 어떻게 Node Version을 강제할 수 있을까요?
노드 버전은 package.json
과 .npmrc
의 설정으로 강제할 수 있습니다. 우선 package.json
에서 engines
필드로 node version을 명시합니다. node의 버전과 더불어 pnpm의 버전까지 명시할 수도 있습니다.
{
"engines": {
"node": "14",
"pnpm": "7"
},
}
그 다음으로는 .npmrc
를 아래와 같이 작성합니다. .npmrc
는 Node.js 패키지 관리자의 구성 파일입니다. 이 파일은 npm이 로컬에서 패키지를 설치하고 관리하는 방법을 제어합니다. 그 중 engine-strict
를 true
로 설정하면 package.json
의 engine
필드에 명시한 version이 아니면 실행을 제한합니다.
engine-strict=true
이제 Node version 관리의 필요성을 알게됐습니다. 어떻게 Node Version을 관리할 수 있을까요? 이미 다양한 Node version 관리 프로그램이 개발되고 있습니다. nvm
, volta
, fnm
,n
등이 가장 유명합니다. 이중에서 저는 fnm을 선택해서 사용하고 있습니다.
fnm은 Fast Node Manager의 약어로 Node.js 버전 관리 도구 중 하나입니다. fnm은 빠르고 간단한 CLI 도구로, 다양한 Node.js 버전을 쉽게 설치하고 관리할 수 있습니다. 제작자가 fnm을 만든 계기는 nvm
이 너무 느려서였다고 합니다. nvm
에 영향을 받아서인지 nvm
과 비슷한 인터페이스를 가지고 있습니다. fnm
의 장점은 다음과 같습니다.
다음 명령어를 실행하여 fnm을 설치할 수 있습니다.
curl -fsSL <https://github.com/Schniz/fnm/raw/master/.ci/install.sh> | bash
terminal에서 ~/.zshrc를 수정합니다.
# zhsrc 프로파일 열기
open ~/.zshrc
# 아래 코드 추가
eval "$(fnm env --use-on-cd)"
이제 다시 terminal을 실행하거나 source ~/.zshrc
를 실행합니다.
fnm을 사용하면 다양한 Node.js 버전을 설치하고 각 프로젝트에 맞는 버전을 사용할 수 있습니다.
install
명령어를 통해서 특정 node version을 다운받습니다. 소숫점을 붙이지 않고 정수형태로 입력하면 lts를 다운받습니다.
fnm install {Node.js version}
# 14 lts 다운
fnm install 14
use
명령어로 사용하고 싶은 Node version을 선택합니다. 로컬에 해당하는 Node version이 없다면 다운받을 것인지 fnm이 물어봅니다.
fnm use {Node.js version}
default로 사용하고 싶은 node version을 선택합니다.
fnm default {Node.js version}
volta에서는 volta pin {Node.js version}
명령어를 통해서 같은 기능을 제공합니다.
fnm은 터미널 현재 위치() 변경될 때마다 자동으로 .node-version
이나 .nvmrc
파일을 참조해서 nvm use
커맨드를 실행합니다.
즉, .node-version
에 버전을 명시하면 프로젝트마다 자동으로 node-version을 설정하는 것이 가능합니다.
node --version
v14.18.3
node --version > .node-version
지금까지 총 세개의 Node Version 관리자를 사용했습니다. nvm -> volta -> fnm 순서입니다.
nvm
은 fnm
에 비해 느리고 초기설정도 다소 복잡합니다. 그리고 프로젝트별 node version을 자동으로 설정하는 작업이 어렵습니다.
nvm
을 오래 사용하다가 volta
로 넘어갔습니다. volta는 node 뿐만아니라 yarn, pnpm같은 패키지 매니저의 버전도 관리합니다. 이미 패키지 매니저 버전은 corepack
으로 관리하고 있었기 때문에 저에게는 불필요한 관리였습니다. 결국 설정에 피로감을 느끼고 다른 Node version 관리자를 찾습니다.
최종적으로 fnm에 정착했습니다. nvm에 비해 빠르지만 인터페이스는 같습니다. 그리고 volta의 편의성도 가지고 있습니다. 기존에 nvm을 사용했다면 fnm
을 사용할 것을 강력히 추천합니다. volta
를 사용하지만 이 글을 보고 매력을 느꼈다면 fnm
을 한번 사용해보길 바랍니다.