본문 바로가기
TIL with Programmers

[TIL] Node.js 생태계, npm(node pakage manager)

by 보먀 2024. 8. 30.
728x90
반응형

1. npm (node pakage manage)

  • 자바스크립트 패키지 매니저
  • Node.js 에서 사용할 수 있는 모듈들을 패키지화하여 모아둔 저장소 역할 + 패키지 설치/관리를 위한 CLI 제공
  • 필요한 패키지를 검색해서 설치할 수 있고, 자신이 만든 패키지를 올릴 수도 있음

 
추가로 나는 패키지 / 모듈 / 라이브러리의 차이점을 잘 몰랐는데, 

  • 라이브러리는 여러 패키지와 모듈들을 모아놓은 것
  • 패키지는 특정 기능과 관련된 여러 모듈을 한 폴더 안에 넣어 관리하는 것
  • 모듈은 함수, 변수 등을 모아놓은 것

그래서 라이브러리 >= 패키지 >= 모듈이라고 생각하면 될 것 같다. 
 
 
1.1. npm 커맨드

npm [명령어] [패키지명] [옵션]

 
 
설치

npm install [패키지명]

 
패키지명 뒤에 @version 을 붙이면 특정 버전 설치 가능

npm install [패키지명]@version

 
 
--global (또는 -g)
 
global 은 말그대로 "전역" 이라는 뜻이며, 이 옵션을 사용해서 설치하면 모든 디렉토리에 설치된다. 
하지만, 패키지를 사용하지 않는 디렉토리에 설치되는 것은 불필요한 일이므로 꼭 필요할 때만 이 옵션을 사용하자.
(-g 옵션없이 설치하면 설치를 진행한 디렉토리에만 설치됨)

npm install [패키지명] -g

 
대신 전역으로 설치하면 pakage.json 에 기록이 되지 않기 때문에 협업 환경에 좋지 않다. 
 
 
삭제

npm uninstall [패키지명]

 
 
--save-dev (또는 -D)
 
특정 패키지는 소프트웨어를 개발할 때는 필요하지만 소프트웨어 배포 시에는 필요하지 않다. 이런 패키지들을 설치할 때는 --save-dev 옵션을 사용하는 것이 좋다.
이 옵션을 사용하여 설치하면 설치한 패키지가 dependencies 필드에 기록되는 것이 아니라 devDenpendencies 라는 필드에 기록되는데, 이 필드는 개발할 때만 사용하는 개발용 의존 패키지를 명시한다. 

npm install [패키지명] --save-dev

 
 
npm list (또는 npm ls)
현재 디렉토리 안에 설치된 패키지 목록을 보여준다. -g 옵션을 사용하면 전역 설치된 패키지 목록을 볼 수 있다. 

npm list
npm list -g

 
 

2. pakage.json / pakage-lock.json / node_modules

 
Node.js 프로젝트에서는 많은 패키지를 사용하게 되고 패키지의 버전도 빈번하게 업데이트 되므로 패키지를 일괄 관리할 필요가 있다. 
npm 은 pakage.json 파일을 통해서 프로젝트 정보와 패키지의 의존성(dependency)를 관리한다. 
패키지를 설치하면 디렉토리 안에 node_modules 폴더와 pakage.json, pakage-lock.json 파일이 생겨난다. 
 
node_modules
-> 설치한 모듈이 저장되는 곳
-> 디렉토리에 npm 으로 처음 패키지를 설치하면 이 폴더가 생겨나고, 패키지를 설치할 때마다 이 폴더 안에 패키지가 저장됨
 
pakage.json
-> 현재 패키지에 대한 정보가 기록되어 있는 곳
-> dependencies 필드에 설치한 패키지(모듈)들의 정보가 적혀있음
 
pakage-lock.json
-> pakage.json 파일에는 내가 설치한 패키지+버전만 기록되어 있지만, pakage-lock.json 파일에는 내가 설치한 패키지와 dependency 로 설치된 패키지들과 각 패키지의 버전이 정확하게 기록되어 있음
 
 
그렇다면 이 파일은 왜 필요할까?

-> node_modules 폴더는 용량이 굉장히 크기 때문에 이 폴더를 공유하는 대신 pakage.json 파일을 공유한다. 
공유 받고 npm install 명령어를 치면 pakage.json 파일에 명시된 모든 의존 패키지를 한번에 설치할 수 있다. 

 
 
 
 

728x90
반응형