2022년 3월 4일 금요일

NodeJS 버전 문제 해결 방안

 NodeJS를 데비안 패키지 관리자로 유지해서 사용하면 버전이 12로 설치된다. 

이것저것 하다보면 npm install 단계에서 NodeJS가 버전업하면서 변경된 부분에서 문제를 발생시킨다.

stack Error: `make` failed with exit code: 2

를 위시로하여 많은 문제점들을 보여준다.

/usr/include/nodejs/deps/v8/include/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’

이건 Chrome’s V8 JavaScript engine의 기능 중 지원 중단된 기능이 있다고 경고해 주는 메시지로 보인다. 아마도 현재사용하는 NodeJS의 버전이 과거 버전이라고 알려주는 것으로 파악된다.

../../nan/nan_object_wrap.h:124:26: error: ‘class Nan::Persistent<v8::Object>’ has no member named ‘IsNearDeath’
  124 |     assert(wrap->handle_.IsNearDeath());

이것도 같은 맥락으로 보여지는데 v8::Object의 메서드 중 IsNearDeath이 없다고 하는 에러이고, 이외에도 v8기능이 존재는 하는데 요구되는 기능에 대응하는 메서드가 없거나 약간 다른 형태로 존재해서 문제가 발생하거나 하는 에러메시지들이다.

npm ERR! ../../nan/nan_implementation_12_inl.h:103:42: error: cannot convert ‘v8::Isolate*’ to ‘v8::Local<v8::Context>’
npm ERR!   103 |   return scope.Escape(v8::Function::New( isolate
npm ERR!       |                                          ^~~~~~~
npm ERR!       |                                          |
npm ERR!       |                                          v8::Isolate*
npm ERR! In file included from /usr/include/nodejs/src/node.h:67,
npm ERR!                  from ../src/addon.cpp:1:

이건, /usr/include/nodejs/src/node.h에 있는 기능과 설치할 패키지의 소스가 요구하는 기능이 서로 맞지 않아서 생기는 문제로 보인다. 아무튼 이러한 종류의 문제들이 많다.

그래서, NodeJS의 LTS(Long Term Support )버전인 16을 설치해 보아야 하는 것이 옳은 결정인것 같다. 하지만, 이 문제가 아닐 경우 되돌릴 수 있는 방법도 생각해 보아야 하기 때문에, 바로 설치 하기 보담, nvm이라고 하는 NodeJS Version Manager라는 것을 설치하고 여러 버전의 NodeJS를 설치하고 관리하는 방법으로 시도해 보고자 한다.

먼저, nvm을 설치해야 한다. 데비안 패키지 관리자를 통해서 설치해 보려고 하는데 없다. 직접 다운로드하거나, nvm의 공식 사이트에서 제공하는 소스트리를 통해서 설치해야 한다. 그래서 공식 사이트에서 제공하는 소스트리를 추가하고 데비안 패키지 관리자를 통해서 설치해 본다.

사전 준비 작업

$ sudo apt update && sudo apt install curl -y
nvm 제공 사이트에서 nvm설치, 시스템 설정 및 환경 설치해주는 스크립트 다운로드
$ curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash 
그럼 새롭게 설정된 환경 변수를 다시 로딩한다.
$ source ~/.profile 
현시점에서 사용가능한 NodeJS 버전 살펴보기
$ nvm ls-remote
시도해볼 버전을 설치해본다. 여기선 v16으로 해본다.
$ nvm install v16.14.0
여기까지 하면 현재 시스템에 두개의 버전(현재 설치되어 있던 v12와 새로설치된 v16)이 동시에 존재하게 된다.
이 부분은 다음 명령어로 확인할 수 있다.
$ nvm list
그럼 사용하고 싶은 버전으로 변경은 다음의 명령어로 할 수 있다. 여기선 v16.14.0으로 변경해 본다.
$ nvm use 16.14.0
그리고 필요없는 버전은 다음의 명령어로 제거할 수 있다.
$ nvm uninstall v9.5.0