nvm을 이용한 node.js의 버전 관리 방법

Front-end

새 노트북에서 node 를 설치후 기존에 잘 돌아가던 프로젝트를 빌드 하거나 실행하면 다음과 같은 에러가 발생하였다.

D:\redmanager\views>npm run start

> tuto@0.1.0 start
> set PORT=1024 && react-scripts start
Starting the development server...

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (D:\redmanager\views\node_modules\webpack\lib\util\createHash.js:90:53)
    at NormalModule._initBuildHash (D:\redmanager\views\node_modules\webpack\lib\NormalModule.js:401:16)
    at handleParseError (D:\redmanager\views\node_modules\webpack\lib\NormalModule.js:449:10)
    at D:\redmanager\views\node_modules\webpack\lib\NormalModule.js:481:5
    at D:\redmanager\views\node_modules\webpack\lib\NormalModule.js:342:12
    at D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:373:3
    at iterateNormalLoaders (D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
    at iterateNormalLoaders (D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
    at D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:236:3
    at runSyncOrAsync (D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:130:11)
    at iterateNormalLoaders (D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:232:2)
    at Array.<anonymous> (D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:205:4)
    at Storage.finished (D:\redmanager\views\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:55:16)
    at D:\redmanager\views\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:91:9
Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
D:\redmanager\views\node_modules\react-scripts\scripts\start.js:19
  throw err;
  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (D:\redmanager\views\node_modules\webpack\lib\util\createHash.js:90:53)
    at NormalModule._initBuildHash (D:\redmanager\views\node_modules\webpack\lib\NormalModule.js:401:16)
    at D:\redmanager\views\node_modules\webpack\lib\NormalModule.js:433:10
    at D:\redmanager\views\node_modules\webpack\lib\NormalModule.js:308:13
    at D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:367:11
    at D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:233:18
    at context.callback (D:\redmanager\views\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
    at D:\redmanager\views\node_modules\babel-loader\lib\index.js:51:103
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v18.15.0

확인해 보니 최신버전의 node 가 설치 되어 발생하는 문제였다.

다시 삭제하고 재설치 해야 하나 싶었는데 nvm 으로 node의 버전을 손쉽게 관리 할 수 있었다.

협업을 할 때, 또는 다양한 프로젝트를 동시에 진행해야 할 때 다양한 라이브러리 / 프레임워크 / 개발툴의 버전 호환 문제를 겪을 수 있다.

그때마다 Node.js를 재설치 및 삭제하는 방법으로는 한계가 있고 불편할 뿐더러 시간도 아깝다.

이런 상황에서 Node.js 버전을 상황에 따라 변경해 가면서 사용하게끔 도와주는 것이 NVM이다.

NVM 은 Node Version Manager 의 약자로써 Node.js의 도구이며, 상황에 따라 버전을 변경해 가면서 사용할 수 있도록 도와준다.

터미널에서 명령어로 매우 간단하게 노드 버젼을 스위칭할 수 있다.

nvm-windows는 MIT 라이센스의 오픈 소스로 Go로 작성되었다.

아래 링크에서 nvm-setup.exe 5.22 MBNov 13, 2022 로 설치를 진행해 보았다.

https://github.com/coreybutler/nvm-windows/releases

nvm-windows는 Node.js v4+에서 지원되기 때문에 기본적인 Node.js는 설치가 되어 있어야 한다.

  • 컴퓨터에 다양한 버전의 Node.js 를 설치할 수 있게 해준다.
  • use 커맨드를 이용해 사용할 Node 버전으로 간단하게 스위칭할수 있게 해준다.
  • 디폴트 버전을 설정하거나 / 설치한 버전들의 전체 리스트를 확인하거나 / 필요 없는 버전을 삭제하는 등등… 소위 버전 관리가 쉬워진다.
node -v              # 노드 버전 확인
nvm list             # 설치된 노드 버전 리스트 확인
nvm install lts      # 최신 lts 버전 설치
nvm install 14.17.4  # 특정 버전 node 설치
nvm use 14.17.4      # 14.17.4 버전으로 스위칭

아래는 실제로 수행했던 cmd 창 갈무리.

D:\redmanager\views>nvm install 14.17.4
Downloading node.js version 14.17.4 (64-bit)...
Complete
Creating C:\Users\User\AppData\Roaming\nvm\temp

Downloading npm version 6.14.14... Complete
Installing npm v6.14.14...

Installation complete. If you want to use this version, type

nvm use 14.17.4

D:\redmanager\views>nvm list

  * 18.15.0 (Currently using 64-bit executable)
    14.17.4

D:\redmanager\views>nvm use 14.17.4
Now using node v14.17.4 (64-bit)

D:\redmanager\views>nvm list

    18.15.0
  * 14.17.4 (Currently using 64-bit executable)

더 자세한 내용은 git 링크에서 확인하십시오.

다음 글: HUGO를 이용한 정적 사이트 생성 및 github pages를 이용한 블로그 운영 방법