nodeenv로 프로젝트별 버전 관리하기

서론

현재 회사에서 진행하는 프로젝트와 개인적으로 진행하는 사이드 프로젝트는 제각각 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#

마치며

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

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

You've successfully subscribed to taking
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.