코딩쌀롱

[Node.js] npm으로 package.json 관리하기 본문

개발공부

[Node.js] npm으로 package.json 관리하기

이브✱ 2021. 2. 23. 13:03

서비스에 필요한 패키지를 하나씩 추가하다 보면 어느새 패키지 수가 100개를 훌쩍 넘어버리게 된다.(아직 나는 그래본 적 없음ㅎㅎ) 패키지 별로 버전이 있고, 버전마다 기능이 다를 수 있으므로 프로젝트를 설치할 때 패키지도 동리한 버전을 설치해야 한다. 이때 설치한 패키지의 버전을 관리하는 파일이 package.json이다!

 

따라서 노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json부터 만들고 시작해야 한다.

$ npm init
$ npm init -y
// -y 옵션은 --yes와 같다. 디폴트값으로 생성해줌

npm init을 하면 정보들을 일일이 입력해줘야 한다.

npm init -y를 하면 디폴트 값으로 package.json이 생성된다.

 

✱ package.json의 "scripts"

 npm 명령어를 저장해두는 부분이다. 자주 쓰는 명령어를 값으로 주고 지정한 키로 편하게 쓸 수 있다. 

"scripts" : {
   "test": "echo \"Error: no test specified\" && exit 1",
   "start": "nodemon app",
},

 예로 터미널에 npm run test를 입력하면 콘솔에 해당 문자열을 입력(echo)하고 에러와 함께 종료(exit1)된다. npm run start를 입력하면 nodemon으로 app.js를 실행시킨다. test, start 외에도 scripts 속성에 명령어 여러 개를 등록해두고 사용할 수 있다. 보통 start 명령어에 node [파일명]을 저장한다.(nodemon을 쓴다면 예시처럼) 

 그리고 start나 test같은 스크립트는 run을 붙이지 않아도 실행된다.

 

✱ package.json의 "dependencies" 

 패키지 이름과 설치된 버전이 저장된다. npm install 명령어에 --save 옵션은 dependencies에 패키지 이름을 추가해주는 옵션인데 현재는 기본값으로 설정되어 있어 따로 붙이지 않아도 자동으로 추가된다.

 

✱ package-lock.json

 직접 설치한 패키지 외에도 node_modules에 들어 있는 패키지들의 정확한 버전과 의존 관계가 담겨 있다. npm으로 패키지를 설치, 수정, 삭제할 때마다 패키지 간의 내부 의존 관계가 이 파일에 저장된다.

 

 node_modules

 설치한 패키지들이 들어있는 폴더. npm에서 패키지 하나만 설치해도 패키지가 여러 개 들어있다. 패키지 하나가 의존하는 패키지들이 많기 때문. 패키지 하나가 다른 여러 패키지에 의존하고, 그 패키지들은 또 다른 패키지들에 의존한다. 이렇게 의존관계가 복잡하게 얽혀 있어 package.json이 필요한 것.

 

 이 폴더를 지웠다하더라도 package.json만 있다면 걱정하지 않아도 된다. package.json에 설치한 패키지 내역이 들어 있으므로 npm install을 입력하면 알아서 패키지가 설치된다.

 

 즉, node_modules는 언제든지 npm install로 설치할 수 있으므로 node_modules는 보관할 필요가 없다. 깃에도 커밋하지 않는다. 중요한 파일은 package.json이다.

 

✱옵션들

--save-dev  : 개발용 패키지(실제 배포 시에는 사용되지 않고 개발 중에만 사용되는 패키지들)

package.json의 "devDependencies" 속성(개발용 패키지들만 따로 관리)에 저장된다. 줄여서  -D 로 쓴다.

$ npm install --save-dev nodemon

 

--global  : 전역 설치. 패키지를 현재 폴더의 node_modules에 설치하는 것이 아니라 npm이 설치되어 있는 폴더(맥의 기본 경로는 /usr/local/lib/node_modules)에 설치한다.  이 폴더의 경로는 보통 시스템 환경 변수에 등록되어 있으므로 전역 설치한 패키지는 콘솔의 명령어로 사용할 수 있다.(무슨 말인지 이해되시는 분 댓글 좀....) 전역 설치한 패키지는 package.json에 기록되지 않는다. 줄여서  -g 로 쓴다.

 리눅스, 맥에서는 전역 설치 시에 관리자 권한이 필요하므로 sudo를 앞에 붙여야 한다. 

 


참고📚

조현영 - Node.js 교과서

 

 

Comments