서론

현재 회사에서 진행하는 프로젝트와 개인적으로 진행하는 사이드 프로젝트는 제각각 Node 버전이 다르다. 회사에서 여러 개의 프로젝트를 같이 진행하고 있다.

(1) node 16.16.0 (backend - node express / frontend - react + vitejs)

(2) node 14.17.5 (backend - go echo / front - react + webpack)

(3) node 16.15.0 (backend - not yet / front - svelte+ vitejs)

본론

별도의 VM을 통해 관리하면 모를까, 하나의 서버에서 프로젝트별로 node 버전 적용해서 개발하기란 쉽지 않았다. Visual Studio Code 서버를 띄워 모든 개발을 거기서 하므로 더욱이 불편했다.

GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active nod...
GitHub - tj/n: Node version management
Node version management. Contribute to tj/n development by creating an account on GitHub.

위 링크와 같이 NVM(Node Version Manager), n(Node Version Management)을 사용해서 변경해주는 것 또한 한두 번이지 프로젝트가 많아질수록 귀찮아졌다.

그 와중에 서칭하던 중 Python의 virtualenv같이 Node 또한 env 별로 관리해주는 툴을 발견하게 되었다.

GitHub - ekalinin/nodeenv: Virtual environment for Node.js & integrator with virtualenv
Virtual environment for Node.js & integrator with virtualenv - GitHub - ekalinin/nodeenv: Virtual environment for Node.js & integrator with virtualenv

패키지 이름은 nodeenv로 python이 설치되어있어야한다.

최신 리눅스 운영체제에는 python 3 버전이 설치되어 있기 때문에 pip3를 설치하고 진행하면 된다.

nodeenv 설치

root@e072cbd36d4b:~/workspace# pip install nodeenv
Collecting nodeenv
  Downloading nodeenv-1.7.0-py2.py3-none-any.whl (21 kB)
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from nodeenv) (45.2.0)
Installing collected packages: nodeenv
Successfully installed nodeenv-1.7.0

사용방법

// node, npm 버전 설정
nodeenv --node={node_version} --npm={npm_version} {env-filename}
// node만 버전 설정
nodeenv --node={node_version} {env-filename}

env 생성

root@e072cbd36d4b:~/workspace# nodeenv --node=16.16.0 env-16.16.0
 * Install prebuilt node (16.16.0) ..... done.
root@e072cbd36d4b:~/workspace# nodeenv --node=14.17.5 env-14.17.5
 * Install prebuilt node (14.17.5) ..... done.
root@e072cbd36d4b:~/workspace# ls
animalinfo  env-14.17.5  env-16.16.0  mint-chocolate
root@e072cbd36d4b:~/workspace#

env 적용

root@e072cbd36d4b:~/workspace# ls
animalinfo  env-14.17.5  env-16.16.0  mint-chocolate
root@e072cbd36d4b:~/workspace# source env-16.16.0/bin/activate
(env-16.16.0) root@e072cbd36d4b:~/workspace# node -v
v16.16.0
(env-16.16.0) root@e072cbd36d4b:~/workspace# deactivate_node
root@e072cbd36d4b:~/workspace#
root@e072cbd36d4b:~/workspace# source env-14.17.5/bin/activate
(env-14.17.5) root@e072cbd36d4b:~/workspace# node -v
v14.17.5
(env-14.17.5) root@e072cbd36d4b:~/workspace# deactivate_node
root@e072cbd36d4b:~/workspace#

마치며

이로써 더욱 쾌적한 개발 환경이 구성되었다 :) !

회사에서 개발하고, 집에서 쉴 때도 개발하고... 취미가 뭐냐고 물으면 "개발...!" 이라고 하게 된다.