JS/Node.js

[node.js] npm으로 package.json 환경설정

kth990303 2021. 3. 28. 18:12
반응형

오늘 오래동안 못해왔던 node.js 공부를 다시해보려고 한다.

너무 안한지 오래되어 기억이 잘 나지 않는다.

그래서 오늘부터 예전에 사놨던 조현영님의 Node.js 교과서를 공부하면서 다시 처음부터 익혀보려고 한다.

 

VanillaJS도 가물가물한데, node.js를 한다고 괜찮을지 모르겠지만,

일단 node.js 인프런 강좌를 들으면서 환경세팅 하고,

VanillaJS도 틈틈이 스스로 무언갈 만들면서 많이 익혀보도록 해야겠다.

그래도 우선순위는 백준이랑 스프링 공부이긴 하다

스코페 2차 후기랑 오늘 백준 그룹연습대회도 포스팅 해야되는데, 할 게 너무 많구만...

 

npm?

New Public Management 즉, 프로젝트 매니저라 보면 될 것 같다.

npm을 통해 package.json을 만들어주는데, 이 package.json이 스프링에서의 build.gradle 느낌이라 보면 될듯. dependency를 npm으로 package.json을 이용해서 추가해주면 된다.

특히 npm은 Node.js의 기본 패키지 관리자라 하니 nodejs 공부하는동안에는 앞으로 굉장히 많이 보지 않을까 싶다.

 

npm을 통해 프로젝트 만들기

 

npm init: package.json 생성

 

package.json을 만들어줄 폴더로 이동

(cd 폴더명) -> npm init 입력

package name: 자기가 만들어줄 패키지명 입력

author: 내 이름

license: MIT (MIT로 하면 오픈소스로 하겠다는 뜻. 입력 안해도 괜찮을 듯 하다)

위와 같이 잘 입력해주면 아래와 같이 package.json이 생긴다.

 

??: 왜 dependencies에 이것저것 설치돼있지? devDependencies는 뭐고, 왜 당신은 package-lock.json도 같이 있나?

 

npm i express (npm install express랑 같은 말이다.)

npm i cookie-parser body-parser (이렇게 여러 dependency를 설치할 수 있다)

 

위와 같이 입력해주면 dependencies는 위와 똑같이 된다.

express는 nodejs를 위한 웹프레임워크인데, 이걸 설치하면 nodejs로 백엔드 개발을 더 편하게 할 수 있다고 한다. 실제로 http통신을 위해 createServer 해줘야했던 시절보다 확실히 편해진다. (예전 기억상으론..)

cookie-parser, body-parser는 이름에서부터 아시다시피 쿠키를 이용하기 위해, 그리고 파일 긁어오기 위해 있는 것이다.

 

npm i -D nodemon

 

-D는 무엇이냐 하면, 개발단계에서만 이 라이브러리를 적용하고, 배포단계에선 적용하지 않겠다는 의미.

위와 같이 하면 devDependencies도 생긴다.

nodemon은 참고로 파일 수정할경우 서버를 자동으로 리로딩해주는 라이브러리이다.

 

그리고 사실 위에는 안보이지만 하나 더 깔았는데, dependencies나 devdependencies에는 보이지 않는 것이 있다. 이것은 npm i -g 명령어로 설치한 것이다.

 

npm i -g rimraf (추천하지 않는 방법)

 

-g는 글로벌 설치라는 것으로, 전역변수 느낌이랑 비슷하다. rimraf가 뭐길래 -D나 그냥 install로 설치하지 않고 -g (글로벌)로 설치한 것일까? 얘같은 경우는 라이브러리가 아닌 명령어이다. rimraf라는 명령어인 것이다. 이 rimraf 명령어를 깔고 나면 rimraf node-modules (또는 npx rimraf node-modules),(npx는 글로벌 명령어)  라고 하면 node-modules를 삭제할 수 있다. 즉, 무언가를 삭제해주는 명령어인 것이다.

근데, 그냥 폴더에서 삭제하면 되는거 아닌가? 굳이 까는 이유는 모르겠는데, 우선 책에서 깔고 있으니 나도 깔아봤다.

 

단, -g로 설치하면 package.json에 깔렸는지 표시가 안되기 때문에, 요즘은 이 방법을 거의 기피한다.

따라서 그냥 npm i rimraf로 까는 것을 추천한다고 한다.

npm i rimraf -D 로 package.json에 보이도록 재설치하였다.

npm i rimraf -D 는 npm i -D rimraf랑 동일하다.

 

어라? 근데 node-modules랑 package-lock.json도 같이 생겼네? 이게 뭘까?

 

node-modules

우리가 express, cookie-parser, body-parser 등등 많이 깔았는데, 이 오픈소스들 또한 내장 라이브러리들을 보유하고 있을 것이다. 그런것들이 모조리 다 깔린 것들을 보여주는 것이다.

 

이 node-modules는 용량이 매우 크기 때문에, 배포할 때에는 node-modules를 삭제한다고 한다. (단, 폐쇄망에 배포할 때는 제외) 이후, 다운받는 사람들이 npm i 라고만 입력해주면 package.json에 있는 라이브러리들이 모조리 깔려서 그 사람들한테 node-modules가 각각 생긴다고 한다.

package-lock.json

package-lock.json

package-lock.json 은 nodejs 버전 충돌 문제를 방지하기 위해 버전을 정확히 표현해주는 json파일이다.

버전 문제가 생기는 경우 빼곤 건들일이 거의 없다고 생각하면 된다.

보통 맨 앞자리 버전만 같으면 큰 충돌 없이 잘 이용할 수 있다고 한다.

 

버전은 보통 2.1.7 이렇게 세 부분으로 나뉘는데,

  1. 첫 번째 숫자는 하위 호환이 되지 않는 변경사항. 즉 큰 규모의 업데이트가 됐을 때 변경됨.
  2. 두 번째 숫자는 하위 호환이 되는 변경사항. 따라서 버전 충돌 문제가 일어나지 않는다.
  3. 세 번째 숫자는 마이너한 버그 수정사항이라고 한다.

package.json의 ^1.14.7 이런 식으로 ^ 표시가 있는 이유가, 

버전 업데이트를 허용하되, 첫 번째 자리가 바뀌는 업데이트를 허용하지 않겠다는 의미라고 한다.

 

 

npm i express@latest : 가장 최신 버전 중 검증된 express 버전 설치

 

 

이런 식으로 @latest를 붙이면 설치 버전을 설정하여 설치할 수 있다. @latest를 가장 많이 쓴다고 한다.

npm i express@4 이렇게 설정해주면 4.xx 버전이 설치가 된다.

 

 

정보량이 너무 많아서 나중에 내가 보려고 포스팅했다.

이제 좀 쉬다가 백준 그룹연습 Div.2 칠 준비를 해야겠다.

반응형