nvm보다 빠른 fnm으로 Node Version을 관리하자

금교영·2023년 3월 12일
2
post-thumbnail

해당 포스트는 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-stricttrue로 설정하면 package.jsonengine필드에 명시한 version이 아니면 실행을 제한합니다.

engine-strict=true

이제 Node version 관리의 필요성을 알게됐습니다. 어떻게 Node Version을 관리할 수 있을까요? 이미 다양한 Node version 관리 프로그램이 개발되고 있습니다. nvm, volta, fnm ,n 등이 가장 유명합니다. 이중에서 저는 fnm을 선택해서 사용하고 있습니다.

fnm이란?

fnm은 Fast Node Manager의 약어로 Node.js 버전 관리 도구 중 하나입니다. fnm은 빠르고 간단한 CLI 도구로, 다양한 Node.js 버전을 쉽게 설치하고 관리할 수 있습니다. 제작자가 fnm을 만든 계기는 nvm이 너무 느려서였다고 합니다. nvm에 영향을 받아서인지 nvm과 비슷한 인터페이스를 가지고 있습니다. fnm의 장점은 다음과 같습니다.

  • cross-platform 지원
    - nvm은 window를 지원하지 않음 (nvm-windows를 사용해야함)
    • nvm이 window를 지원할 수 없는 이유는 nvm이 bash script이기 때문임
  • nvm에 비해서 속도가 빠름
    - rust로 쓰여져있다.
    • nvm은 bash script임
  • volta와 같이 프로젝트에 진입하면 자동으로 node version 변환 가능
  • 설치와 구성이 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 사용하기

fnm을 사용하면 다양한 Node.js 버전을 설치하고 각 프로젝트에 맞는 버전을 사용할 수 있습니다.

fnm install

install 명령어를 통해서 특정 node version을 다운받습니다. 소숫점을 붙이지 않고 정수형태로 입력하면 lts를 다운받습니다.

fnm install {Node.js version}

# 14 lts 다운
fnm install 14 

fnm use

use 명령어로 사용하고 싶은 Node version을 선택합니다. 로컬에 해당하는 Node version이 없다면 다운받을 것인지 fnm이 물어봅니다.

fnm use {Node.js version}

fnm default

default로 사용하고 싶은 node version을 선택합니다.

fnm default {Node.js version}

프로젝트에 진입하면 node 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

fnm은 쓸만한가?

지금까지 총 세개의 Node Version 관리자를 사용했습니다. nvm -> volta -> fnm 순서입니다.

nvmfnm에 비해 느리고 초기설정도 다소 복잡합니다. 그리고 프로젝트별 node version을 자동으로 설정하는 작업이 어렵습니다.

nvm을 오래 사용하다가 volta로 넘어갔습니다. volta는 node 뿐만아니라 yarn, pnpm같은 패키지 매니저의 버전도 관리합니다. 이미 패키지 매니저 버전은 corepack으로 관리하고 있었기 때문에 저에게는 불필요한 관리였습니다. 결국 설정에 피로감을 느끼고 다른 Node version 관리자를 찾습니다.

최종적으로 fnm에 정착했습니다. nvm에 비해 빠르지만 인터페이스는 같습니다. 그리고 volta의 편의성도 가지고 있습니다. 기존에 nvm을 사용했다면 fnm을 사용할 것을 강력히 추천합니다. volta를 사용하지만 이 글을 보고 매력을 느꼈다면 fnm을 한번 사용해보길 바랍니다.

profile
SW Engineer를 꿈꾸는 👨‍🌾

0개의 댓글