Node.js와 NPM

lyju777·2022년 7월 23일
0
post-thumbnail

업무환경이 변화함에 따라서 기존에 쓰던 로컬 개발 환경 Node.js 버전을 NVM을 사용하여 12버전에서 16버전으로 업데이트를 해야 할 일이 생겼다. 버전 업데이트와 Node.module의 재설치 등은 금방 해결할 수 있었지만 생각해보니 항상 쓰고있는 NPM과 Node.js환경 이름만 익숙하지 정확히 어떤 이유에서 사용하게 되는 것인지 이번 기회에 내용을 정리해보기로 한다.

Node.js와 NPM, NVM?

Node.js

Node.js는 브라우저 밖에서도 자바스크립트를 실행할 수 있는 환경을 의미한다. Node.js가 나오기 전까지는 자바스크립트가 브라우저의 동작을 제어하는데 사용되었고 브라우저에서만 실행할 수 있었지만 이제는 Node.js로 자바스크립트를 브라우저 외부에서도 실행할 수 있게 되었다.

NPM

NPM(Node Package Manager)는 명령어로 자바스크립트 라이브러리를 설치하고 관리할 수 있는 패키지 매니저이다.
NPM은 Node.js를 설치하면 같이 설치가 된다. 버전 업데이트도 마찬가지

🤔 그럼 NVM은 뭐지?

NVM

NVM(Node Version Manager)는 Node.js 의 버전을 관리하는 도구로 명령어를 통해 각 Node.js의 버전 설치 및 삭제, 한번 설치한 버전을 저장하여 여러 버전을 필요에 따라 변경할 수가 있어 쉬운 버전 관리가 가능하다.

package.json? Package-lock.json?

Node.js를 16버전으로 설치 후에 Node.module 파일을 삭제 후 npm ci 명령어를 사용해서 다시 Node.module을 설치를 했다. 이유를 여쭤보니 package-lock.json이 변경되지 않게 하기 위해서 였는데 npm installnpm ci 의 차이점 package.json? Package-lock.json이 정확히 어떤 차이가 있는건지가 궁금해졌다.

package.json

package.json 파일은 Node.js의 현재 프로젝트에 관한 정보를 저장한다.
npm은 package.json 파일을 통해서 프로젝트 정보와 패키지의 의존성(dependency)을 관리한다. 이미 작성된 package.json이 있다면 팀 내에 배포하여 동일한 개발 환경을 빠르게 구축할 수 있는 장점이 있다.
npm에서 의존성(dependency)이란 해당 프로젝트가 돌아가기 위해 필요한 npm 패키지들을 의미한다.

package-lock.json

package.json에서는 버전정보를 저장할 때 version range를 사용한다.
예로 패키지가 "express": "~1.14.1" 이라고 작성되어 있다면,
이는 1.14.1버전 이상부터 1.15.0 미만의 패키지를 사용할 것이라는 의미와 같다.
그렇기 때문에 같은 프로젝트를 협업하는 팀원과 각자의 패키지 버전이 다르다면 오류가 발생할 수도 있다. 이를 방지하고자 package-lock.json은 정확한 패키지 버전을 명시하여 정확한 버전의 패키지를 다운받도록 도와준다.

🤔그래서 왜 npm ci로 설치를 하는건가?

npm install

npm install은 package.json을 읽어 의존성 목록을 만들고 package-lock.json 을 통해 설치할 의존성의 버전을 알려준다.

npm ci

package.json보다 package-lock.json을 우선시하여 패키지 파일을 설치한다.
npm ci에서 package.json 은 버전이 매칭되는지 확인하는 용도로 사용한다. 즉 package.json과 package-lock.json 내의 버전이 다르면 package-lock.json을 기준으로 package.json 파일을 수정한다.

결론

위에서 쓴 글 과 같이 프로젝트 간에 협업을 할 경우 package-lock.json에 명시되어있는 각 패키지의 버전이 협업 팀원과 동일해야 하기 때문에 npm ci로 설치를 한 것이였다.또 npm ci가 설치속도가 더 빠르다..

profile

0개의 댓글