본문 바로가기
Programming JavaScript/Node

nodenv 로 현재 사용중인 node 정보 확인 및 npm 관리 하기

by jjerryhan 2018. 5. 5.
반응형

이번 포스트는 nodenv 를 통해 현재 작업중인 나의 workspace 에 적용된 node 정보를 확인하는 법을 알아보겠습니다.
nodenv 를 우선 설치 및 구성 한 후에만 아래 tutorial 이 정상적으로 실행됩니다.

nodenv 를 통해 현재 접속한 shell 에 특정 node version 지정하기

nodenv 를 통해 local (현재 경로) 와 global (시스템 공통) 에 특정 version 을 지정할 수가 이지만, 특별한 경우에는 현재 접속한 shell 에 특정 node 버전을 배정해야 하는 경우가 있습니다. (isolation purpose)

CI 자동화와 CD 자동화 구성시에 가장 많이 활용되는데요. nodenv 는 이를 위해 nodenv shell 명령어를 추가로 제공합니다.

nodenv shell

nodenv shell 은 현재 사용자가 사용중인 tty (작업 경로 포함) 에 대해 active 한 node 버전을 직접 지정하고자 할 때 사용합니다.

nodenv shell [버전번호]

위 명령어는 NODENV_VERSION 환경변수를 생성하여 version 을 지정하며, npm 작업시나 CI 작업시에 해당 환경변수를 참조하여 활용하도록 지정도 가능하고, nodenv 도 local 로 지정된 version 을 제외하고 가장 우선 순위를 갖기 때문에 특정 빌드시작 전에 즉각적인 node version 변경이 필요할 경우 활용이 가능합니다.

Screen Shot 2018-05-05 at 9.05.34 PM.png
nodenv shell 이 실행되면 현재 쉘에 NODENV_VERSION 환경변수가 설정됩니다.

nodenv 를 통해 현재 사용중인 Active 한 node version 확인

nodenv 를 통해 복수의 node 를 설치 및 관리하는 경우 가끔 내가 지금 사용하고 있는, 적용된 node version 에 대한 정보를 기억하지 못하는 경우가 발생합니다.

이때 사용할 수 있는 명령어가 nodenv versions 입니다.

nodenv version | versions

nodenv version 은 현재 사용자가 사용중인 tty (작업 경로 포함) 에 대해 active 한 node 가 무엇이고 해당 버전은 몇 인지를 알려줍니다.
Screen Shot 2018-05-05 at 9.09.50 PM.png

nodenv versions 는 현재 시스템에 설치되어 있는 node 들은 무엇이며, 그 중 active 한 node 가 무엇인지를 알려줍니다.
전체 설치된 node (즉시 사용가능한 node) 목록을 제공한다는 점이 nodenv version 과 다른 점입니다.
Screen Shot 2018-05-05 at 9.10.41 PM.png

시스템에 설치된 node 환경을 재구성 해주는 rehash

nodenv 를 통해 복수의 node 엔진을 관리하는 경우, npm 명령으로 global 에 설치한 팩키지들이 제대로 참조되지 못하는 경우가 발생합니다.

npm i -g [package]

위와 같이 특정 package 를 global 에 설치할 경우 사용자의 bin 경로에 해당 package 의 executable 이 추가로 설치되게 되는데, nodenv 의 shims intercept 에 의해 정상적으로 설치 한 후에도 해당 실행 명령어를 찾지 못하거나 정상적으로 실행되지 못하는 경우가 발생합니다.

이 경우 nodenv rehash 를 통해 shims 를 재 구성(rehash) 해 주셔야만 해당 실행 명령어가 정상적으로 참조되어 실행됩니다.
Screen Shot 2018-05-05 at 9.20.51 PM.png
npm 을 통해 yarn 을 설치하였으나 제대로 참조되지 않아 오류가 발생.

Screen Shot 2018-05-05 at 9.21.12 PM.png
nodenv rehash 실행 후 정상적으로 yarn 명령어 실행됨.

nodenv rehash 명령어는 현재 설치된 npm 패키지내의 executable 을 조회(~/.nodenv/versions//bin/) 하여 shims 경로(~/.nodenv/shims/) 해당 executable 에 대한 interceptor 을 생성해 주어 이후 사용자가 해당 명령어를 실행할 경우 nodenv 와 동일하게 특정 버전에 해당하는 package 가 실행되도록 처리해 줍니다.
Screen Shot 2018-05-06 at 12.28.46 AM.png
< nodenv rehash 를 실행하면 위와 같이 shims 파일들이 추가 또는 업데이트 됨 >

설치된 npm 패키지에 대한 정보 조회하기

복수 node 버전에 대해 global 한 npm 패키지가 복잡하게 설치되어 있는 경우 현재 실행하고자 하는 package 가 어떤 버전에 설치된 package 인지를 확인해야 할 경우가 조종 발생합니다.

이때 사용하는 명령어가 nodenv which 입니다.
nodenv which 는 현재 주어진 명령어에 해당하는 패키지가 설치된 전체 경로를 알려 줍니다.
Screen Shot 2018-05-05 at 9.29.27 PM.png
< 8.11.1 node 에는 yarn 이 설치되어 있지만, 9.10.1 node 에는 yarn 이 설치되어 있지 않음을 확인 >

설치된 모든 패키지에 대한 정보 조회하기

현재 시스템에 설치된 모든 팩키지를 조회할 수 있습니다.

nodenv whence [pacakge]

Screen Shot 2018-05-05 at 9.31.47 PM.png
< 시스템에 설치되어 있는 모든 대상 package 목록을 조회 >

nodenv whence 는 현재 Active 한 node 에 설치된 package 뿐 아니라 모든 설치된 node 버전에서 해당 package 를 조회해서 결과를 보여줍니다.


프로젝트가 많아지고 복잡해 짐에 따라 복수의 node 버전을 구분하여 모두 관리하여야 할 필요가 요구됨에 따라 함께 발전해온 nodenv 를 통해 복잡한 환경에 대한 운영 관리에 조금이라도 편리함을 얻으셨으면 좋겠습니다.

    긴 글 읽어주셔서 감사합니다.